diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9f9287b6ce3a0fd701759980af06f709566eaeb4
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,152 @@
+cmake_minimum_required(VERSION 3.7)
+
+project(jami-qt)
+
+# todo: show error if Qt version < 5.14
+# todo: move to common.cmake
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb")
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
+
+set(QML_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/resources.qrc)
+set(QML_RESOURCES_QML ${CMAKE_CURRENT_SOURCE_DIR}/qml.qrc)
+
+# todo: check LRC exists?
+set(LRC ${CMAKE_CURRENT_SOURCE_DIR}/../install/lrc)
+
+set(QML_LIBS
+    Qt5::Quick
+    Qt5::QuickWidgets
+    Qt5::Network
+    Qt5::Svg
+    Qt5::QuickControls2
+    Qt5::WebEngine
+    Qt5::DBus
+    Qt5::Core)
+
+set(COMMON_SOURCES
+    src/bannedlistmodel.cpp
+    src/accountlistmodel.cpp
+    src/networkmanager.cpp
+    src/runguard.cpp
+    src/updatemanager.cpp
+    src/webchathelpers.cpp
+    src/main.cpp
+    src/smartlistmodel.cpp
+    src/utils.cpp
+    src/pixbufmanipulator.cpp
+    src/rendermanager.cpp
+    src/connectivitymonitor.cpp
+    src/mainapplication.cpp
+    src/messagesadapter.cpp
+    src/accountadapter.cpp
+    src/calladapter.cpp
+    src/conversationsadapter.cpp
+    src/distantrenderer.cpp
+    src/previewrenderer.cpp
+    src/avadapter.cpp
+    src/contactadapter.cpp
+    src/pluginadapter.cpp
+    src/settingsadapter.cpp
+    src/deviceitemlistmodel.cpp
+    src/pluginitemlistmodel.cpp
+    src/mediahandleritemlistmodel.cpp
+    src/preferenceitemlistmodel.cpp
+    src/mediacodeclistmodel.cpp
+    src/accountstomigratelistmodel.cpp
+    src/audioinputdevicemodel.cpp
+    src/videoinputdevicemodel.cpp
+    src/audiooutputdevicemodel.cpp
+    src/pluginlistpreferencemodel.cpp
+    src/videoformatfpsmodel.cpp
+    src/videoformatresolutionmodel.cpp
+    src/audiomanagerlistmodel.cpp
+    src/qmlregister.cpp
+    src/utilsadapter.cpp)
+
+set(COMMON_HEADERS
+    src/networkmanager.h
+    src/smartlistmodel.h
+    src/updatemanager.h
+    src/utils.h
+    src/bannedlistmodel.h
+    src/version.h
+    src/accountlistmodel.h
+    src/runguard.h
+    src/lrcinstance.h
+    src/globalsystemtray.h
+    src/appsettingsmanager.h
+    src/webchathelpers.h
+    src/pixbufmanipulator.h
+    src/rendermanager.h
+    src/connectivitymonitor.h
+    src/jamiavatartheme.h
+    src/mainapplication.h
+    src/qrimageprovider.h
+    src/messagesadapter.h
+    src/accountadapter.h
+    src/tintedbuttonimageprovider.h
+    src/calladapter.h
+    src/conversationsadapter.h
+    src/distantrenderer.h
+    src/previewrenderer.h
+    src/qmladapterbase.h
+    src/avadapter.h
+    src/contactadapter.h
+    src/pluginadapter.h
+    src/settingsadapter.h
+    src/deviceitemlistmodel.h
+    src/pluginitemlistmodel.h
+    src/mediahandleritemlistmodel.h
+    src/preferenceitemlistmodel.h
+    src/mediacodeclistmodel.h
+    src/accountstomigratelistmodel.h
+    src/audioinputdevicemodel.h
+    src/videoinputdevicemodel.h
+    src/audiooutputdevicemodel.h
+    src/pluginlistpreferencemodel.h
+    src/videoformatfpsmodel.h
+    src/videoformatresolutionmodel.h
+    src/audiomanagerlistmodel.h
+    src/qmlregister.h
+    src/qtutils.h
+    src/utilsadapter.h)
+
+find_package(Qt5 CONFIG REQUIRED
+    Core
+    Quick
+    QuickWidgets
+    Network
+    Svg
+    QuickControls2
+    WebEngine
+    DBus)
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}
+    ${SRC_DIR}
+    ${LRC}/include/libringclient
+    ${LRC}/include)
+
+add_executable(${PROJECT_NAME}
+    ${SRC_DIR}/main.cpp
+    ${COMMON_HEADERS}
+    ${COMMON_SOURCES}
+    ${QML_RESOURCES}
+    ${QML_RESOURCES_QML})
+
+# alternative: link_directories(${LRC}/lib)
+find_library(ringclient ringclient ${LRC}/lib NO_DEFAULT_PATH)
+find_library(qrencode qrencode)
+
+target_link_libraries(jami-qt
+    ${QML_LIBS}
+    ${ringclient}
+    ${qrencode})