diff --git a/.gitignore b/.gitignore
index 8497dbe8c2b5a7271ad351e434d575f5910d8d1b..1316742b3cd061754803991b0233865f78c9b37e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 *.pro.user
+build_*/
 lib/qtlib/
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8b9aeb21e5e7915f53c7edd64193f29561df50b8
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,15 @@
+dist: trusty
+sudo: required
+services:
+  - docker
+
+branches:
+  only:
+    - master
+
+script:
+  - mntdir='/mnt/ocs-manager'
+  #- docker run --rm -v $(pwd):${mntdir} ubuntu:16.04 /bin/bash -c "sh ${mntdir}/scripts/build-docker.sh snap"
+  #- docker run --rm -v $(pwd):${mntdir} ubuntu:16.04 /bin/bash -c "sh ${mntdir}/scripts/build-docker.sh flatpak"
+  - docker run --rm -v $(pwd):${mntdir} ubuntu:16.04 /bin/bash -c "sh ${mntdir}/scripts/build-docker.sh appimage"
+  - cat transfer.log
diff --git a/ocs-manager.pro b/ocs-manager.pro
index 39771319c0595d0332d78a4cfe92d996b22c0f80..abe448f18d9931b1a9d80d4643a97987d6176401 100644
--- a/ocs-manager.pro
+++ b/ocs-manager.pro
@@ -22,5 +22,6 @@ include($${PWD}/lib/lib.pri)
 include($${PWD}/app/app.pri)
 include($${PWD}/desktop/desktop.pri)
 include($${PWD}/i18n/i18n.pri)
+include($${PWD}/pkg/pkg.pri)
 include($${PWD}/scripts/scripts.pri)
 include($${PWD}/deployment.pri)
diff --git a/pkg/appimage/appimage.sh b/pkg/appimage/appimage.sh
new file mode 100644
index 0000000000000000000000000000000000000000..b176ca739dce6d39dac2fca93048cb8f4b72197e
--- /dev/null
+++ b/pkg/appimage/appimage.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+sh scripts/import.sh
+
+qmake PREFIX="/usr"
+make
+make INSTALL_ROOT="ocs-manager.AppDir" install
+
+curl -L -o linuxdeployqt.AppImage "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
+chmod 755 linuxdeployqt.AppImage
+
+./linuxdeployqt.AppImage ocs-manager.AppDir/usr/share/applications/ocs-manager.desktop -bundle-non-qt-libs -no-translations
+./linuxdeployqt.AppImage ocs-manager.AppDir/usr/share/applications/ocs-manager.desktop -appimage
diff --git a/pkg/pkg.pri b/pkg/pkg.pri
new file mode 100644
index 0000000000000000000000000000000000000000..285c2e56f6e290a7be6dd4909629d9e5029e7245
--- /dev/null
+++ b/pkg/pkg.pri
@@ -0,0 +1 @@
+DISTFILES += $${PWD}/appimage/appimage.sh
diff --git a/scripts/build-docker.sh b/scripts/build-docker.sh
new file mode 100644
index 0000000000000000000000000000000000000000..12573088cc001e0e9d72cf56cfabb26901a32def
--- /dev/null
+++ b/scripts/build-docker.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+################################################################################
+# This is wrapper script for build.sh use from inside docker container
+################################################################################
+
+PKGNAME='ocs-manager'
+
+PKGUSER='pkgbuilder'
+
+BUILDTYPE=''
+if [ "${1}" ]; then
+    BUILDTYPE="${1}"
+fi
+
+PROJDIR="$(cd "$(dirname "${0}")/../" && pwd)"
+
+BUILDSCRIPT="${PROJDIR}/scripts/build.sh"
+
+TRANSFERLOG="${PROJDIR}/transfer.log"
+
+transfer_file() {
+    filepath="${1}"
+    if [ -f "${filepath}" ]; then
+        filename="$(basename "${filepath}")"
+        echo "Uploading ${filename}" >> "${TRANSFERLOG}"
+        curl -T "${filepath}" "https://transfer.sh/${filename}" >> "${TRANSFERLOG}"
+        echo "" >> "${TRANSFERLOG}"
+    fi
+}
+
+build_snap() {
+    echo 'Not implemented yet'
+}
+
+build_flatpak() {
+    echo 'Not implemented yet'
+}
+
+build_appimage() {
+    # docker-image: ubuntu:16.04
+    apt update -qq
+    apt -y install build-essential qt5-default libqt5websockets5-dev
+    apt -y install git
+    apt -y install curl
+
+    useradd -m ${PKGUSER}
+    export HOME="/home/${PKGUSER}"
+    chown -R ${PKGUSER}:${PKGUSER} "${PROJDIR}"
+
+    su -c "sh "${BUILDSCRIPT}" ${BUILDTYPE}" ${PKGUSER}
+
+    transfer_file "$(find "${PROJDIR}/build_"*${BUILDTYPE} -type f -name "${PKGNAME}*.AppImage")"
+}
+
+if [ "${BUILDTYPE}" = 'snap' ]; then
+    build_snap
+elif [ "${BUILDTYPE}" = 'flatpak' ]; then
+    build_flatpak
+elif [ "${BUILDTYPE}" = 'appimage' ]; then
+    build_appimage
+else
+    echo "sh $(basename "${0}") [snap|flatpak|appimage]"
+    exit 1
+fi
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100644
index 0000000000000000000000000000000000000000..eabd464009bdc9c03bc25fda651ffead8638a0c8
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+################################################################################
+# This is utility script to build distribution packages
+################################################################################
+
+PKGNAME='ocs-manager'
+
+BUILDTYPE=''
+if [ "${1}" ]; then
+    BUILDTYPE="${1}"
+fi
+
+PROJDIR="$(cd "$(dirname "${0}")/../" && pwd)"
+
+BUILDVER="$(cd "${PROJDIR}" && git describe --always)"
+
+BUILDDIR="${PROJDIR}/build_${PKGNAME}_${BUILDVER}_${BUILDTYPE}"
+
+SRCARCHIVE="${BUILDDIR}/${PKGNAME}.tar.gz"
+
+export_srcarchive() {
+    filepath="${1}"
+    $(cd "${PROJDIR}" && git archive --prefix="${PKGNAME}/" --output="${filepath}" HEAD)
+}
+
+build_snap() {
+    echo 'Not implemented yet'
+}
+
+build_flatpak() {
+    echo 'Not implemented yet'
+}
+
+build_appimage() {
+    cd "${PROJDIR}"
+    mkdir -p "${BUILDDIR}"
+    export_srcarchive "${SRCARCHIVE}"
+
+    tar -xzvf "${SRCARCHIVE}" -C "${BUILDDIR}"
+    cp "${PROJDIR}/pkg/appimage/appimage.sh" "${BUILDDIR}/${PKGNAME}"
+    cd "${BUILDDIR}/${PKGNAME}"
+    sh appimage.sh
+}
+
+if [ "${BUILDTYPE}" = 'snap' ]; then
+    build_snap
+elif [ "${BUILDTYPE}" = 'flatpak' ]; then
+    build_flatpak
+elif [ "${BUILDTYPE}" = 'appimage' ]; then
+    build_appimage
+else
+    echo "sh $(basename "${0}") [snap|flatpak|appimage]"
+    exit 1
+fi
diff --git a/scripts/scripts.pri b/scripts/scripts.pri
index 47e7b4bf65cbaf037ad2933caa803bbe7b7582d6..a4a1c60eae14a275504996188ce7cff0e6b8853f 100644
--- a/scripts/scripts.pri
+++ b/scripts/scripts.pri
@@ -1 +1,4 @@
-DISTFILES += $${PWD}/import.sh
+DISTFILES += \
+    $${PWD}/build-docker.sh \
+    $${PWD}/build.sh \
+    $${PWD}/import.sh