{"id":13436391,"url":"https://github.com/probonopd/linuxdeployqt","last_synced_at":"2025-05-14T01:10:58.910Z","repository":{"id":37759399,"uuid":"67432158","full_name":"probonopd/linuxdeployqt","owner":"probonopd","description":"Makes Linux applications self-contained by copying in the libraries and plugins that the application uses, and optionally generates an AppImage. Can be used for Qt and other applications","archived":false,"fork":false,"pushed_at":"2025-05-04T15:06:02.000Z","size":721,"stargazers_count":2306,"open_issues_count":210,"forks_count":429,"subscribers_count":74,"default_branch":"master","last_synced_at":"2025-05-04T16:20:12.929Z","etag":null,"topics":["appimage","applications","deployment","linux","packaging","qt","qt5"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/probonopd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.GPLv3","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-05T15:32:09.000Z","updated_at":"2025-05-04T15:04:36.000Z","dependencies_parsed_at":"2024-07-09T03:05:33.383Z","dependency_job_id":"bfb64569-3ac4-44b7-9c1d-8450b76f330f","html_url":"https://github.com/probonopd/linuxdeployqt","commit_stats":{"total_commits":613,"total_committers":53,"mean_commits":"11.566037735849056","dds":"0.19902120717781402","last_synced_commit":"04480557d24c9d0d45f1f27f9ac1b8f1387d1d26"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probonopd%2Flinuxdeployqt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probonopd%2Flinuxdeployqt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probonopd%2Flinuxdeployqt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probonopd%2Flinuxdeployqt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/probonopd","download_url":"https://codeload.github.com/probonopd/linuxdeployqt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254049311,"owners_count":22006035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appimage","applications","deployment","linux","packaging","qt","qt5"],"created_at":"2024-07-31T03:00:47.606Z","updated_at":"2025-05-14T01:10:56.321Z","avatar_url":"https://github.com/probonopd.png","language":"C++","readme":"# linuxdeployqt [![Build Status](https://github.com/probonopd/linuxdeployqt/actions/workflows/build.yaml/badge.svg?branch=master)](https://github.com/probonopd/linuxdeployqt/actions) ![Downloads](https://img.shields.io/github/downloads/probonopd/linuxdeployqt/total.svg) [![discourse](https://img.shields.io/badge/forum-discourse-orange.svg)](http://discourse.appimage.org/t/linuxdeployqt-new-linux-deployment-tool-for-qt/57) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/probonopd/AppImageKit?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge) [![irc](https://img.shields.io/badge/IRC-%23AppImage%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=AppImage)\n\n**Please note:** As of 2024 , I am no longer actively working on this codebase in favor of https://github.com/probonopd/go-appimage.\n\nThis Linux Deployment Tool, `linuxdeployqt`, takes an application as input and makes it self-contained by copying in the resources that the application uses (like libraries, graphics, and plugins) into a bundle. The resulting bundle can be distributed as an AppDir or as an [AppImage](https://appimage.org/) to users, or can be put into cross-distribution packages. It can be used as part of the build process to deploy applications written in C, C++, and other compiled languages with systems like `CMake`, `qmake`, and `make`. When used on Qt-based applications, it can bundle a specific minimal subset of Qt required to run the application.\n\n![](https://user-images.githubusercontent.com/2480569/34471167-d44bd55e-ef41-11e7-941e-e091a83cae38.png)\n\n## Differences to macdeployqt\nThis tool is conceptually based on the [Mac Deployment Tool](https://doc.qt.io/qt-5/macos-deployment.html#macdeploy), `macdeployqt` in the tools applications of the Qt Toolkit, but has been changed to a slightly different logic and other tools needed for Linux.\n\n* Instead of an `.app` bundle for macOS, this produces an [AppDir](http://rox.sourceforge.net/desktop/AppDirs.html) for Linux\n* Instead of a `.dmg` disk image for macOS, this produces an [AppImage](http://appimage.org/) for Linux which is quite similar to a dmg but executes the contained application rather than just opening a window on the desktop from where the application can be launched\n\n## A note on binary compatibility\n\n__To produce binaries that are compatible with many target systems, build on the oldest still-supported build system.__ The oldest still-supported release of Ubuntu is currently targeted, tested and supported by the team. \n\nWe recommend to target the oldest still-supported Ubuntu LTS release and build your applications on that. If you do this, the resulting binaries should be able to run on newer (but not older) systems (Ubuntu and other distributions).\n\n`linuxdeployqt` refuses to work on systems any newer than the oldest currently still-supported Ubuntu LTS release, because we want to encourage developers to build applications in a way that makes them possible to run on all still-supported distribution releases. For an overview about the support cycles of Ubuntu LTS releases, please see https://wiki.ubuntu.com/Releases. If you absolutely need to build your application on a build system newer than the oldest currently still-supported Ubuntu LTS release, then consider using go-appimage `appimagetool -s deploy` (unlike `linuxdeployqt`, this bundles _all_ libraries).\n\n`linuxdeployqt` does not contain any specific workarounds for Wayland which breaks many things. For best results, do not use Wayland.\n\n## Installation\n\nPlease download __linuxdeployqt-x86_64.AppImage__ from the [Releases](https://github.com/probonopd/linuxdeployqt/releases) page and `chmod a+x` it. If you would like to build `linuxdeployqt` from source instead, see [BUILDING.md](https://github.com/probonopd/linuxdeployqt/blob/master/BUILDING.md).\n\n## Usage\n\n```\nUsage: linuxdeployqt \u003capp-binary|desktop file\u003e [options]\n\nOptions:\n   -always-overwrite        : Copy files even if the target file exists.\n   -appimage                : Create an AppImage (implies -bundle-non-qt-libs).\n   -bundle-non-qt-libs      : Also bundle non-core, non-Qt libraries.\n   -exclude-libs=\u003clist\u003e     : List of libraries which should be excluded,\n                              separated by comma.\n   -ignore-glob=\u003cglob\u003e      : Glob pattern relative to appdir to ignore when\n                              searching for libraries.\n   -executable=\u003cpath\u003e       : Let the given executable use the deployed libraries\n                              too\n   -executable-dir=\u003cpath\u003e   : Let all the executables in the folder (recursive) use\n                              the deployed libraries too\n   -extra-plugins=\u003clist\u003e    : List of extra plugins which should be deployed,\n                              separated by comma.\n   -no-copy-copyright-files : Skip deployment of copyright files.\n   -no-plugins              : Skip plugin deployment.\n   -no-strip                : Don't run 'strip' on the binaries.\n   -no-translations         : Skip deployment of translations.\n   -qmake=\u003cpath\u003e            : The qmake executable to use.\n   -qmldir=\u003cpath\u003e           : Scan for QML imports in the given path.\n   -qmlimport=\u003cpath\u003e        : Add the given path to QML module search locations.\n   -show-exclude-libs       : Print exclude libraries list.\n   -verbose=\u003c0-3\u003e           : 0 = no output, 1 = error/warning (default),\n                              2 = normal, 3 = debug.\n   -updateinformation=\u003cupdate string\u003e        : Embed update information STRING; if zsyncmake is installed, generate zsync file\n   -version                 : Print version statement and exit.\n\nlinuxdeployqt takes an application as input and makes it\nself-contained by copying in the Qt libraries and plugins that\nthe application uses.\n\nBy default it deploys the Qt instance that qmake on the $PATH points to.\nThe '-qmake' option can be used to point to the qmake executable\nto be used instead.\n\nPlugins related to a Qt library are copied in with the library.\n\nSee the \"Deploying Applications on Linux\" topic in the\ndocumentation for more information about deployment on Linux.\n```\n\n#### Simplest example\n\nYou'll need to provide the basic structure of an `AppDir` which should look something like this:\n```\n└── usr\n    ├── bin\n    │   └── your_app\n    ├── lib\n    └── share\n        ├── applications\n        │   └── your_app.desktop\n        └── icons\n            └── \u003ctheme\u003e\n                └── \u003cresolution\u003e \n                    └── apps \n                        └── your_app.png\n```\nReplace `\u003ctheme\u003e` and `\u003cresolution\u003e` with (for example) `hicolor` and `256x256` respectively; see [icon theme spec](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) for more details.\n\n\nUsing the desktop file `linuxdeployqt` can determine the parameters of the build.\n\nWhere your desktop file would look something like:\n```\n[Desktop Entry]\nType=Application\nName=Amazing Qt App\nComment=The best Qt Application Ever\nExec=your_app\nIcon=your_app\nCategories=Office;\n```\n\n* Notice that both `Exec` and `Icon` only have file names.\n* Also Notice that the `Icon` entry does not include an extension.\n\nRead more about desktop files in the [Desktop Entry Specification 1.0](https://standards.freedesktop.org/desktop-entry-spec/1.0/).\n\nNow you can say: `linuxdeployqt-continuous-x86_64.AppImage path/to/AppDir/usr/share/applications/your_app.desktop`\n\nFor a more detailed example, see \"Using linuxdeployqt with Travis CI\" below.\n\n#### Checking library inclusion\n\nOpen in Qt Creator and build your application. Run it from the command line and inspect it with `ldd` to make sure the correct libraries from the correct locations are getting loaded, as `linuxdeployqt` will use `ldd` internally to determine from where to copy libraries into the bundle.\n\n#### QMake configuration\n\n__Important:__ By default, `linuxdeployqt` deploys the Qt instance that qmake on the $PATH points to, so make sure that it is the correct one. Verify that qmake finds the correct Qt instance like this before running the `linuxdeployqt` tool:\n\n```\nqmake -v\n\nQMake version 3.0\nUsing Qt version 5.7.0 in /tmp/.mount_QtCreator-5.7.0-x86_64/5.7/gcc_64/lib\n```\n\nIf this does not show the correct path to your Qt instance that you want to be bundled, then adjust your `$PATH` to find the correct `qmake`.\n\nAlternatively, use the `-qmake` command line option to point the tool directly to the qmake executable to be used.\n\n#### Remove unnecessary files\n\nBefore running linuxdeployqt it may be wise to delete unneeded files that you do not wish to distribute from the build directory. These may be autogenerated during the build. You can delete them like so:\n\n```\nfind $HOME/build-*-*_Qt_* \\( -name \"moc_*\" -or -name \"*.o\" -or -name \"qrc_*\" -or -name \"Makefile*\" -or -name \"*.a\" \\) -exec rm {} \\;\n```\n\nAlternatively, you could use `$DESTDIR`.\n\n#### Adding icon and icon theme support\n\nTo enable icon and icon theme support you must add `iconengines` as an extra Qt plugin while running `linuxdeployqt`. In order for your application to locate the system theme icons, the `libqgtk3.so` platform theme must also be added:\n\n`-extra-plugins=iconengines,platformthemes/libqgtk3.so`\n\n#### Adding extra Qt plugins \n\nIf you want aditional plugins which the tool doesn't deploy, for a variety of reasons, you can use the -extra-plugins argument and include a list of plugins separated by a comma.  \nThe plugins deployed are from the Qt installation pointed out by `qmake -v`.  \nYou can deploy entire plugin directories, a specific directory or a mix of both.\n\nUsage examples: \n\n1. `-extra-plugins=sqldrivers/libqmsql.so,iconengines/libqsvgicon.so`  \n2. `-extra-plugins=sqldrivers,iconengines/libqsvgicon.so`  \n3. `-extra-plugins=sqldrivers,iconengines,mediaservice,gamepads`\n\n#### Handle Qt libraries infix\n\nIf you prepared a custom Qt distribution using the option `-qtlibinfix` during Qt configuration (resulting in library names such as `libQt5CoreCustom.so`), you must mention this infix on `linuxdeployqt` call. As an example, let's see if we configure our distribution using the infix `Custom`.\n\nOn Qt build chain: `configure -qtlibinfix \"Custom\" [...]`. This will generate Qt libraries (.so) like `libQt5CoreCustom.so`\n\nSo, on `linuxdeployqt` call: `linuxdeployqt [...] -qtlibinfix \"Custom\" [...]`.\n\nIf you don't mention this infix, `linuxdeployqt` won't be able to detect Qt Core and Widgets libraries.\n\n### Fix for \"make: Nothing to be done for 'install'\"\n\nIf `qmake` does not allow for `make install` or does not install the desktop file and icon, then you need to change your `.pro` file it similar to https://github.com/probonopd/FeedTheMonkey/blob/master/FeedTheMonkey.pro.\n\n[Here](https://github.com/ilia3101/MLV-App/issues/17#issuecomment-393507203) is another simple example.\n\nIt is common on Unix to also use the build tool to install applications and libraries; for example, by invoking `make install`. For this reason, `qmake` has the concept of an install set, an object which contains instructions about the way a part of a project is to be installed.\n\nPlease see the section \"Installing Files\" on http://doc.qt.io/qt-5/qmake-advanced-usage.html.\n\n### For projects that use CMake, autotools, or meson with ninja instead of qmake\n\n```\n  - make INSTALL_ROOT=appdir install ; find appdir/\n```\n\n__CMake__ wants `DESTDIR` instead:\n\n```\n  - cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr\n  - make -j$(nproc)\n  - make DESTDIR=appdir -j$(nproc) install ; find appdir/\n```\n\nSome applications have the bad habit of relying on CMake versions newer than what comes with the oldest still-supported distributions. In this case, install a newer CMake with\n\n```\n  - sudo rm -rf /usr/bin/cmake /usr/local/cmake-* /usr/local/bin/cmake || true # Needed on Travis CI; don't do this on other systems!\n  - wget \"https://github.com/Kitware/CMake/releases/download/v3.13.2/cmake-3.13.2-Linux-x86_64.tar.gz\" ; sudo tar xf  cmake*.tar.gz --strip-components=1 -C /usr\n```\n\nUnder some circumstances it may also be required to add `-DCMAKE_INSTALL_LIBDIR=/usr/lib` to the `cmake` call.\n\n__autotools__ (the dinosaur that spends precious minutes \"checking...\") wants `DESTDIR` too but insists on an absolute link which we can feed it using readlink:\n\n```\n  - ./configure --prefix=/usr\n  - make -j$(nproc)\n  - make install DESTDIR=$(readlink -f appdir) ; find appdir/\n```\n\nCaution if you encounter\n\n```\nqmake PREFIX=/usr CONFIG+=use_qt_paths\n```\n\nHere, `CONFIG+=use_qt_paths` needs to be removed, otherwise it will install everything under the Qt installation paths in `/opt/qt58` when using the beineri ppa.\n\nThe exception is that you are building Qt libraries that _should_ be installed to the same location where Qt resides on your system, from where it will be picked up by `linuxdeployqt`.\n\n__meson with ninja__ [apparently](https://github.com/openAVproductions/openAV-Luppp/pull/270/commits/fa160a46d908e57b2c5b7bdb47cb5a089e08c212) wants\n\n```\n  - meson --prefix /usr build\n  - ninja -C build\n  - DESTDIR=./appdir ninja -C build install ; find build/appdir\n```\n\n### When using Qt from distribution packages\n\nOn Ubuntu 14.04, you will need to pass in `-qmake=/usr/lib/x86_64-linux-gnu/qt5/bin/qmake` when using distribution packages.\n\n### A note on DESTDIR\n\nAccording to https://dwheeler.com/essays/automating-destdir.html, \n\n\u003e Automating DESTDIR can be a pain, so it’s best if the program supports it to start with; my package Auto-DESTDIR can automatically support DESTDIR in some cases if the program installation does not support it to begin with.\n\nAlso see https://www.gnu.org/prep/standards/html_node/DESTDIR.html for more information.\n\n### Sending Pull Requests on GitHub\n\n`linuxdeployqt` is great for upstream application projects that want to release their software in binary form to Linux users quickly and without much overhead. If you would like to see a particular application use `linuxdeployqt`, then sending a Pull Request may be an option to get the upstream application project to consider it. You can use the following template text for Pull Requests but make sure to customize it to the project in question.\n\n```\nThis PR, when merged, will compile this application on [Travis CI](https://travis-ci.org/) upon each `git push`, and upload an [AppImage](http://appimage.org/) to your GitHub Releases page.\n\nProviding an [AppImage](http://appimage.org/) would have, among others, these advantages:\n- Applications packaged as an AppImage can run on many distributions (including Ubuntu, Fedora, openSUSE, CentOS, elementaryOS, Linux Mint, and others)\n- One app = one file = super simple for users: just download one AppImage file, [make it executable](http://discourse.appimage.org/t/how-to-make-an-appimage-executable/80), and run\n- No unpacking or installation necessary\n- No root needed\n- No system libraries changed\n- Works out of the box, no installation of runtimes needed\n- Optional desktop integration with `appimaged`\n- Optional binary delta updates, e.g., for continuous builds (only download the binary diff) using AppImageUpdate\n- Can optionally GPG2-sign your AppImages (inside the file)\n- Works on Live ISOs\n- Can use the same AppImages when dual-booting multiple distributions\n- Can be listed in the [AppImageHub](https://appimage.github.io/) central directory of available AppImages\n- Can double as a self-extracting compressed archive with the `--appimage-extract` parameter\n- No repositories needed. Suitable/optimized for air-gapped (offline) machines\n- Decentralized\n\n[Here is an overview](https://appimage.github.io/apps) of projects that are already distributing upstream-provided, official AppImages.\n\n__PLEASE NOTE:__ For this to work, you need to set up `GITHUB_TOKEN` in Travis CI for this to work; please see https://github.com/probonopd/uploadtool.\nIf you would like to see only one entry for the Pull Request in your project's history, then please enable [this GitHub functionality](https://help.github.com/articles/configuring-commit-squashing-for-pull-requests/) on your repo. It allows you to squash (combine) the commits when merging.\n\nIf you have questions, AppImage developers are on #AppImage on irc.freenode.net.\n```\n\n## Projects using linuxdeployqt\n\nThese projects are already using [Travis CI](http://travis-ci.org/) and linuxdeployqt to provide AppImages of their builds:\n- https://github.com/probonopd/ImageMagick\n- https://github.com/Subsurface-divelog/subsurface/\n- https://github.com/jimevins/glabels-qt\n- https://travis-ci.org/NeoTheFox/RepRaptor\n- https://github.com/electronpass/electronpass-desktop\n- https://github.com/lirios/browser\n- https://github.com/jeena/FeedTheMonkey\n- https://github.com/labsquare/fastQt/\n- https://github.com/sqlitebrowser/sqlitebrowser/\n- https://github.com/neuro-sys/tumblr-downloader-client\n- https://github.com/LongSoft/UEFITool\n- https://github.com/dannagle/PacketSender\n- https://github.com/nuttyartist/notes\n- https://github.com/leozide/leocad/\n- https://github.com/Blinkinlabs/PatternPaint\n- https://github.com/fathomssen/redtimer\n- https://github.com/coryo/amphetype2\n- https://github.com/chkmue/MyQtTravisTemplateProject\n- https://github.com/chkmue/qttravisCI_1\n- https://github.com/eteran/edb-debugger\n- https://github.com/crapp/labpowerqt/\n- https://github.com/probonopd/linuxdeployqt/ obviously ;-)\n- https://github.com/xdgurl/xdgurl\n- https://github.com/QNapi/qnapi\n- https://github.com/m-o-s-t-a-f-a/dana\n- https://github.com/patrickelectric/mini-qml\n- https://github.com/vaibhavpandeyvpz/apkstudio\n\nThese projects are using GitHub Actions and linuxdeployqt to provide AppImages of their builds:\n- https://github.com/pbek/QOwnNotes ([build-release.yml](https://github.com/pbek/QOwnNotes/blob/develop/.github/workflows/build-release.yml))\n- https://github.com/bjorn/tiled/ ([workflow](https://github.com/bjorn/tiled/blob/master/.github/workflows/packages.yml))\n\nThis project is already using linuxdeployqt in a custom Jenkins workflow:\n- https://github.com/appimage-packages/\n\nThis GitHub template invokes linuxdeployqt during a GitHub CI Action:\n- https://github.com/219-design/qt-qml-project-template-with-ci\n\nThese projects are already using linuxdeployqt:\n- Autodesk EAGLE for Linux http://www.autodesk.com/products/eagle/free-download\n- https://github.com/evpo/EncryptPad\n- https://github.com/grahamrow/Muview2\n- https://github.com/freemountain/quark/\n- https://github.com/Mr0815/geraetepruefung/\n\nThis project on GitLab uses linuxdeployqt:\n\n- https://gitlab.com/rpdev/opentodolist\n\nThis project can be bundled successfully using linuxdeployqt:\n\n- https://gitlab.com/rpdev/opentodolist/issues/96\n\n\n## Contributing\n\nOne great way to contribute is to send Pull Requests to the application projects you'd like to see use linuxdeployqt, as described above. You are also welcome to contribute to linuxdeployqt development itself. Please discuss in the [forum](http://discourse.appimage.org/t/linuxdeployqt-new-linux-deployment-tool-for-qt/57) or using GitHub issues and Pull Requests.\n\n## Contact\n\nThe developers are in the channel #AppImage on irc.freenode.net\n","funding_links":[],"categories":["C++","qt","Tools","AppImage developer tools"],"sub_categories":["Third-Party Tools","Deployment tools for compiled applications"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprobonopd%2Flinuxdeployqt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprobonopd%2Flinuxdeployqt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprobonopd%2Flinuxdeployqt/lists"}