diff --git a/.gitmodules b/.gitmodules
index af6b6e0..6072d35 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -5,3 +5,6 @@
 [submodule "SnakeServer/Qt-Secret"]
 	path = SnakeServer/Qt-Secret
 	url = git@github.com:QuasarApp/Qt-Secret.git
+[submodule "installer"]
+	path = installer
+	url = git@github.com:QuasarApp/DesktopInstaller.git
diff --git a/installer b/installer
new file mode 160000
index 0000000..b92686a
--- /dev/null
+++ b/installer
@@ -0,0 +1 @@
+Subproject commit b92686a46340eca95d49d183d04a3f6586f491ba
diff --git a/installer/config/banner.png b/installer/config/banner.png
deleted file mode 100644
index f7120fc..0000000
Binary files a/installer/config/banner.png and /dev/null differ
diff --git a/installer/config/configLinux.xml b/installer/config/configLinux.xml
deleted file mode 100644
index cfa61e5..0000000
--- a/installer/config/configLinux.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Installer>
-    <WizardDefaultWidth>640px</WizardDefaultWidth>
-    <WizardDefaultHeight>400px</WizardDefaultHeight>
-    <Name>Snake</Name>
-    <Version>1.0.0</Version>
-    <Title>Snake</Title>
-    <Publisher>SKB</Publisher>
-    <StartMenuDir>Snake</StartMenuDir>
-    <TargetDir>@HomeDir@/Snake</TargetDir>
-    <CreateLocalRepository>true</CreateLocalRepository>
-    <InstallActionColumnVisible>true</InstallActionColumnVisible>
-    <RemoveTargetDir>true</RemoveTargetDir>
-    <ControlScript>controlScript.js</ControlScript>
-    <MaintenanceToolName>Uninstall</MaintenanceToolName>
-    <WizardStyle>Classic</WizardStyle>
-    <StyleSheet>style.css</StyleSheet>
-    <Banner>banner.png</Banner>
-    <Logo>logo.png</Logo>
-    <RunProgram>@TargetDir@/snake.sh</RunProgram>
-
-    <RemoteRepositories>
-        <Repository>
-            <Url>http://178.124.160.6:3030/Snake/Linux</Url>
-            <Enabled>1</Enabled>
-            <DisplayName>QuasarApp</DisplayName>
-        </Repository>
-    </RemoteRepositories>
-</Installer>
diff --git a/installer/config/configWin.xml b/installer/config/configWin.xml
deleted file mode 100644
index 3f500c2..0000000
--- a/installer/config/configWin.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Installer>
-    <WizardDefaultWidth>640px</WizardDefaultWidth>
-    <WizardDefaultHeight>400px</WizardDefaultHeight>
-    <Name>Snake</Name>
-    <Version>1.0.0</Version>
-    <Title>Snake</Title>
-    <Publisher>SKB</Publisher>
-    <StartMenuDir>Snake</StartMenuDir>
-    <TargetDir>@HomeDir@/Snake</TargetDir>
-    <CreateLocalRepository>true</CreateLocalRepository>
-    <InstallActionColumnVisible>true</InstallActionColumnVisible>
-    <RemoveTargetDir>true</RemoveTargetDir>
-    <ControlScript>controlScript.js</ControlScript>
-    <MaintenanceToolName>Uninstall</MaintenanceToolName>
-    <WizardStyle>Classic</WizardStyle>
-    <StyleSheet>style.css</StyleSheet>
-    <Banner>banner.png</Banner>
-    <Logo>logo.png</Logo>
-    <RunProgram>@TargetDir@/snake.exe</RunProgram>
-
-    <RemoteRepositories>
-        <Repository>
-            <Url>http://178.124.160.6:3030/Snake/Windows</Url>
-            <Enabled>1</Enabled>
-            <DisplayName>QuasarApp</DisplayName>
-        </Repository>
-    </RemoteRepositories>
-</Installer>
diff --git a/installer/config/controlScript.js b/installer/config/controlScript.js
deleted file mode 100644
index c7c59ec..0000000
--- a/installer/config/controlScript.js
+++ /dev/null
@@ -1,35 +0,0 @@
-function Controller()
-{
-    generateTr();
-
-    installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes);
-    installer.uninstallationFinished.connect(this, Controller.prototype.uninstallationFinished);
-    installer.installationFinished.connect(this, Controller.prototype.installationFinished);
-    runProgramm();
-}
-
-function generateTr() {
-    console.log("generate tr start ")
-
-    installer.setValue("Name", qsTr("Snake"));
-    installer.setValue("Title", qsTr("Install Snake"));
-}
-
-function runProgramm() {
-    if (systemInfo.kernelType === "winnt") {
-        installer.setValue("RunProgram", "@TargetDir@/snake.exe")
-    } else {
-        installer.setValue("RunProgram", "@TargetDir@/snake.sh")
-    }
-}
-
-Controller.prototype.uninstallationFinished = function()
-{
-
-}
-
-
-Controller.prototype.installationFinished = function()
-{
-
-}
diff --git a/installer/config/icon.ico b/installer/config/icon.ico
deleted file mode 100644
index 53635b1..0000000
Binary files a/installer/config/icon.ico and /dev/null differ
diff --git a/installer/config/logo.png b/installer/config/logo.png
deleted file mode 100644
index f7120fc..0000000
Binary files a/installer/config/logo.png and /dev/null differ
diff --git a/installer/config/ru.ts b/installer/config/ru.ts
deleted file mode 100644
index e906b3a..0000000
--- a/installer/config/ru.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1">
-<context>
-    <name>controlScript</name>
-    <message>
-        <location filename="controlScript.js" line="14"/>
-        <source>Snake</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="controlScript.js" line="15"/>
-        <source>Install Snake</source>
-        <oldsource>Install Noisier</oldsource>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-</TS>
diff --git a/installer/config/style.css b/installer/config/style.css
deleted file mode 100644
index f5282ce..0000000
--- a/installer/config/style.css
+++ /dev/null
@@ -1,62 +0,0 @@
-.QWidget {
-    background-color: rgb(255, 255, 255);
-    min-width: 640px;
-}
-
-.QLabel {
-    color: #000000;
-}
-
-.QPushButton {
-    background-color: transparent;
-    border: 2px solid #ffffff;
-    border-radius: 3px;
-    height: 30px;
-    min-width: 100px;
-    padding: 0 15px;
-}
-
-.QPushButton:pressed,
-.QPushButton:checked {
-    background-color: #2ed3ed;
-}
-
-.QPushButton:focus {
-    background-color: #aaf2ff;
-}
-
-.QPushButton:hover {
-    border: 2px solid #2ed3ed;
-}
-
-
-.QProgressBar {
-    background: #b1dbcc;
-    border: 1px solid #cdcdcd;
-    border-radius: 2px;
-    padding: 0;
-    margin: 0;
-    color: #ffffff;
-    height: 30px;
-    text-align: center;
-}
-
-.QProgressBar::chunk {
-    background: #16dbcc;
-    border-radius: 2px;
-    margin: 0;
-}
-
-.QProgressBar:hover {
-    border-color: #2ed3ed;
-}
-
-.QLineEdit {
-    background-color: transparent;
-    border-color: #cdcdcd;
-    height: 30px;
-}
-
-.QLineEdit:hover {
-    border-color: #2ed3ed;
-}
diff --git a/installer/install_prefix.pri b/installer/install_prefix.pri
deleted file mode 100644
index db34b97..0000000
--- a/installer/install_prefix.pri
+++ /dev/null
@@ -1,33 +0,0 @@
-!isEmpty(INSTALL_REFIX_PRI_INCLUDED):error("install_prefix.pri already included")
-INSTALL_REFIX_PRI_INCLUDED = 1
-
-unix:libfiletype=*.so*
-win32:libfiletype=*.dll
-unix:runfiletype=*
-win32:runfiletype=*.exe
-
-isEmpty(PREFIX_BIN) {
-    isEmpty(PREFIX) {
-        PREFIX_BIN = $$PWD/distro
-    } else {
-        unix:PREFIX_BIN = $$PREFIX/bin
-        win32:PREFIX_BIN = $$PREFIX
-    }
-}
-
-isEmpty(PREFIX_LIB) {
-    isEmpty(PREFIX) {
-        PREFIX_LIB = $$PWD/distro
-    } else {
-        unix:PREFIX_LIB = $$PREFIX/lib
-        win32:PREFIX_LIB = $$PREFIX
-    }
-}
-
-target_bin.path = $$PREFIX_BIN
-target_bin.CONFIG += no_check_exist
-target_lib.path = $$PREFIX_LIB
-target_lib.CONFIG += no_check_exist
-
-INSTALLS += target_bin target_lib
-
diff --git a/installer/installer.pri b/installer/installer.pri
deleted file mode 100644
index 7575da2..0000000
--- a/installer/installer.pri
+++ /dev/null
@@ -1,196 +0,0 @@
-QT_DIR = $$[QT_HOST_BINS]
-
-QMAKE_BIN = $$QT_DIR/qmake
-win32:QMAKE_BIN = $$QT_DIR/qmake.exe
-
-message(QT_DIR = $$QT_DIR)
-
-QML_DIR = $$PWD/../Snake/
-DEPLOY_TARGET = $$PWD/../Snake/build/release
-DEPLOY_SERVER = $$PWD/../SnakeServer/Daemon/build/release,$$PWD/../SnakeServer/Terminal/build/release
-
-ANDROID_BUILD_DIR = $$PWD/../android-build
-
-win32:LUPDATE = $$QT_DIR/lupdate.exe
-win32:LRELEASE = $$QT_DIR/lrelease.exe
-
-win32:DEPLOYER = %cqtdeployer%
-
-win32:OUT_FILE = SnakeInstaller.exe
-
-contains(QMAKE_HOST.os, Linux):{
-    LUPDATE = $$QT_DIR/lupdate
-    LRELEASE = $$QT_DIR/lrelease
-    QMAKE_BIN = $$QT_DIR/qmake
-
-    DEPLOYER = cqtdeployer
-
-    OUT_FILE = SnakeInstaller
-
-}
-
-android {
-    DEPLOYER = $$QT_DIR/androiddeployqt
-}
-
-BINARY_LIST
-REPO_LIST
-
-sopprted_versions = 3.1 3.0 2.0
-for(val, sopprted_versions) {
-
-    exists( $$QT_DIR/../../../Tools/QtInstallerFramework/$$val/bin/ ) {
-          message( "QtInstallerFramework v$$val: yes" )
-          BINARY_LIST += $$QT_DIR/../../../Tools/QtInstallerFramework/$$val/bin/binarycreator
-          REPO_LIST += $$QT_DIR/../../../Tools/QtInstallerFramework/$$val/bin/repogen
-    }
-}
-
-isEmpty (BINARY_LIST) {
-      error( "QtInstallerFramework not found!" )
-}
-
-win32:EXEC=$$first(BINARY_LIST).exe
-
-win32:REPOGEN=$$first(REPO_LIST).exe
-
-contains(QMAKE_HOST.os, Linux):{
-    unix:EXEC=$$first(BINARY_LIST)
-    win32:EXEC=wine $$first(BINARY_LIST).exe
-
-    REPOGEN=$$first(REPO_LIST)
-}
-
-message( selected $$EXEC and $$REPOGEN)
-
-
-SUPPORT_LANGS = ru
-
-defineReplace(findFiles) {
-    patern = $$1
-    path = $$2
-
-    all_files = $$files(*$${patern}, true)
-    win32:all_files ~= s|\\\\|/|g
-    win32:path ~= s|\\\\|/|g
-
-    for(file, all_files) {
-        result += $$find(file, $$path)
-    }
-
-    return($$result)
-}
-
-XML_FILES = $$files(*.xml, true)
-
-for(LANG, SUPPORT_LANGS) {
-    for(XML, XML_FILES) {
-        FILE_PATH = $$dirname(XML)
-
-        JS_FILES = $$findFiles(".js", $$FILE_PATH)
-        UI_FILES = $$findFiles(".ui", $$FILE_PATH)
-
-        commands += "$$LUPDATE $$JS_FILES $$UI_FILES -ts $$FILE_PATH/$${LANG}.ts"
-        TS_FILES += $$FILE_PATH/$${LANG}.ts
-
-    }
-
-    for(TS, TS_FILES) {
-        commands += "$$LRELEASE $$TS"
-    }
-}
-
-for(command, commands) {
-    system($$command)|error("Failed to run: $$command")
-}
-
-INSTALL_SERVER_DIR = ~/SnakeServer
-
-IGNORE_ENV=$$PWD/../Distro/,$$PWD/../deployTests,$$PWD/packages/Snake/data/
-BASE_DEPLOY_FLAGS = clear -qmake $$QMAKE_BIN -libDir $$PWD/../ -recursiveDepth 5 -ignoreEnv $$IGNORE_ENV
-BASE_DEPLOY_FLAGS_SERVER = $$BASE_DEPLOY_FLAGS -targetDir $$INSTALL_SERVER_DIR
-BASE_DEPLOY_FLAGS_SNAKE = $$BASE_DEPLOY_FLAGS -targetDir $$PWD/packages/Snake/data
-
-deploy_dep.commands += $$DEPLOYER -bin $$DEPLOY_TARGET -qmlDir $$QML_DIR $$BASE_DEPLOY_FLAGS_SNAKE
-
-install_dep.commands = make INSTALL_ROOT=$$ANDROID_BUILD_DIR install
-
-mkpath( $$PWD/../Distro)
-
-win32:CONFIG_FILE = $$PWD/config/configWin.xml
-unix:CONFIG_FILE = $$PWD/config/configLinux.xml
-
-deploy.commands = $$EXEC \
-                       -c $$CONFIG_FILE \
-                       -p $$PWD/packages \
-                       $$PWD/../Distro/$$OUT_FILE
-
-deploy.depends = deploy_dep
-
-win32:ONLINE_REPO_DIR = $$ONLINE/Snake/Windows
-unix:ONLINE_REPO_DIR = $$ONLINE/Snake/Linux
-
-create_repo.commands = $$REPOGEN \
-                        --update-new-components \
-                        -p $$PWD/packages \
-                        $$ONLINE_REPO_DIR
-
-message( ONLINE_REPO_DIR $$ONLINE_REPO_DIR)
-!isEmpty( ONLINE ) {
-
-    message(online)
-
-    release.depends = create_repo
-
-    deploy.commands = $$EXEC \
-                           --online-only \
-                           -c $$CONFIG_FILE \
-                           -p $$PWD/packages \
-                           $$PWD/../Distro/$$OUT_FILE
-}
-
-android {
-
-    INPUT_ANDROID = --input $$PWD/../Snake/android-libsnake.so-deployment-settings.json
-    OUTPUT_ANDROID = --output $$ANDROID_BUILD_DIR
-    A_PL = --android-platform android-29
-    JDK = --jdk /usr
-
-    GRADLE = --gradle
-
-    deploy_dep.commands = $$DEPLOYER $$INPUT_ANDROID $$OUTPUT_ANDROID $$A_PL $$JDK $$GRADLE
-    deploy_dep.depends = install_dep
-
-    deploy.commands = cp $$ANDROID_BUILD_DIR/build/outputs/apk/* $$PWD/../Distro
-}
-
-OTHER_FILES += \
-    $$PWD/config/*.xml \
-    $$PWD/config/*.js \
-    $$PWD/config/*.ts \
-    $$PWD/config/*.css \
-    $$PWD/packages/Installer/meta/* \
-    $$PWD/packages/Installer/data/app.check \
-    $$PWD/packages/Snake/meta/* \
-
-installSnake.commands = $$DEPLOYER -bin $$DEPLOY_SERVER $$BASE_DEPLOY_FLAGS_SERVER
-
-createLinks.commands = ln -sf $$INSTALL_SERVER_DIR/Terminal.sh ~/.local/bin/snake-term && \
-                       ln -sf $$INSTALL_SERVER_DIR/SnakeServer-daemon.sh ~/.local/bin/snake-d
-
-
-runDaemon.commands = snake-d daemon
-
-unix:!android:release.depends += installSnake
-unix:!android:release.depends += createLinks
-
-
-QMAKE_EXTRA_TARGETS += \
-    installSnake \
-    createLinks \
-    runDaemon \
-    deploy_dep \
-    install_dep \
-    deploy \
-    create_repo \
-    release \
diff --git a/installer/packages/Installer/data/app.check b/installer/packages/Installer/data/app.check
deleted file mode 100644
index 4632653..0000000
--- a/installer/packages/Installer/data/app.check
+++ /dev/null
@@ -1 +0,0 @@
-Noisier
diff --git a/installer/packages/Installer/data/icon.ico b/installer/packages/Installer/data/icon.ico
deleted file mode 100644
index 53635b1..0000000
Binary files a/installer/packages/Installer/data/icon.ico and /dev/null differ
diff --git a/installer/packages/Installer/data/logo.png b/installer/packages/Installer/data/logo.png
deleted file mode 100644
index f7120fc..0000000
Binary files a/installer/packages/Installer/data/logo.png and /dev/null differ
diff --git a/installer/packages/Installer/meta/installscript.js b/installer/packages/Installer/meta/installscript.js
deleted file mode 100644
index 8642463..0000000
--- a/installer/packages/Installer/meta/installscript.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Constructor
-function Component()
-{
-    generateTr();
-}
-
-function generateTr() {
-    console.log("generate tr start ")
-
-    component.setValue("DisplayName", qsTr("Installer"));
-    component.setValue("Description", qsTr("This package contains information of installer"));
-}
-
-function nativeSeparator() {
-    if (installer.value("os") === "win") {
-        return '\\';
-    }
-    return '/'
-}
-
-function isNoEmpty(dir){
-    var libsArray = installer.findPath("*", [dir]);
-    return Boolean(libsArray.length);
-}
-
diff --git a/installer/packages/Installer/meta/package.xml b/installer/packages/Installer/meta/package.xml
deleted file mode 100644
index 95c3415..0000000
--- a/installer/packages/Installer/meta/package.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<Package>
-    <DisplayName>from script</DisplayName>
-    <Description>from script</Description>
-    <Version>1.0.0</Version>
-    <Default>true</Default>
-    <ForcedInstallation>true</ForcedInstallation>
-    <Script>installscript.js</Script>
-    <ReleaseDate>2018-08-25</ReleaseDate>
-    <SortingPriority>201</SortingPriority>
-    <Translations>
-        <Translation>ru.qm</Translation>
-    </Translations>
-</Package>
diff --git a/installer/packages/Installer/meta/ru.ts b/installer/packages/Installer/meta/ru.ts
deleted file mode 100644
index 60ae83d..0000000
--- a/installer/packages/Installer/meta/ru.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1">
-<context>
-    <name>installscript</name>
-    <message>
-        <location filename="installscript.js" line="10"/>
-        <source>Installer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="installscript.js" line="11"/>
-        <source>This package contains information of installer</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-</TS>
diff --git a/installer/packages/Snake/meta/installscript.js b/installer/packages/Snake/meta/installscript.js
deleted file mode 100644
index 4d85eb8..0000000
--- a/installer/packages/Snake/meta/installscript.js
+++ /dev/null
@@ -1,67 +0,0 @@
-function Component()
-{
-    generateTr();
-}
-
-function generateTr() {
-    component.setValue("DisplayName", qsTr("Snake"));
-    component.setValue("Description", qsTr("This package contains Snake"));
-}
-
-
-Component.prototype.createOperations = function()
-{
-    // call default implementation to actually install README.txt!
-    component.createOperations();
-
-    if (!component.isUninstalled()) {
-        console.log("remove icons!!!");
-
-        if (systemInfo.kernelType === "winnt") {
-            console.log("create icons!!! on Windows");
-            component.addOperation("Delete",
-                                   "@DesktopDir@/@Name@.lnk");
-        }
-
-        console.log("remove icons!!!");
-
-        if (systemInfo.kernelType === "linux") {
-
-            console.log("create icons!!! on LINUX");
-            component.addOperation("Delete",
-                                   "@HomeDir@/.local/share/applications/@Name@.desktop");
-            component.addOperation("Delete",
-                                   "@HomeDir@/Desktop/@Name@.desktop");
-
-            console.log("remove icons!!! on LINUX done");
-        }
-
-    } else {
-        console.log("create icons!!!");
-
-        if (systemInfo.kernelType === "winnt") {
-
-            console.log("create icons!!! on Windows");
-            component.addOperation("CreateShortcut",
-                                   "@TargetDir@/snake.exe",
-                                   "@DesktopDir@/@Name@.lnk");
-        }
-
-        console.log("create icons!!!");
-
-        if (systemInfo.kernelType === "linux") {
-            console.log("create icons!!! on LINUX");
-            component.addOperation("CreateDesktopEntry",
-                                   "@HomeDir@/.local/share/applications/@Name@.desktop",
-                                   "Version=@Version@\n
-                                    Type=Application\n
-                                    Terminal=false\n
-                                    Exec=@TargetDir@/snake.sh\n
-                                    Name=@Name@\n
-                                    Icon=@TargetDir@/logo.png\n
-                                    Name[en_US]=@Name@");
-
-            console.log("create icons!!! on LINUX done");
-        }
-    }
-}
diff --git a/installer/packages/Snake/meta/package.xml b/installer/packages/Snake/meta/package.xml
deleted file mode 100644
index 5ba1a32..0000000
--- a/installer/packages/Snake/meta/package.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<Package>
-    <DisplayName>Snake</DisplayName>
-    <Description>Snake</Description>
-    <Version>1.0.0.1</Version>
-    <Default>true</Default>
-    <ForcedInstallation>false</ForcedInstallation>
-    <Script>installscript.js</Script>
-    <ReleaseDate>2018-08-25</ReleaseDate>
-    <SortingPriority>200</SortingPriority>
-    <Translations>
-        <Translation>ru.qm</Translation>
-    </Translations>
-</Package>
diff --git a/installer/packages/Snake/meta/ru.ts b/installer/packages/Snake/meta/ru.ts
deleted file mode 100644
index cbe504b..0000000
--- a/installer/packages/Snake/meta/ru.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1">
-<context>
-    <name>installscript</name>
-    <message>
-        <location filename="installscript.js" line="7"/>
-        <source>Snake</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="installscript.js" line="8"/>
-        <source>This package contains Snake</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-</TS>