{"id":15034528,"url":"https://github.com/martchus/syncthingtray","last_synced_at":"2025-05-14T07:11:15.357Z","repository":{"id":37821193,"uuid":"66505150","full_name":"Martchus/syncthingtray","owner":"Martchus","description":"Tray application and Dolphin/Plasma integration for Syncthing","archived":false,"fork":false,"pushed_at":"2025-05-06T08:50:44.000Z","size":14280,"stargazers_count":2068,"open_issues_count":17,"forks_count":51,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-05-06T09:48:41.062Z","etag":null,"topics":["dolphin","hacktoberfest","plasma","plasmoid","qt-widgets","synchronization","syncthing","tray-application"],"latest_commit_sha":null,"homepage":"https://martchus.github.io/syncthingtray/","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/Martchus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2016-08-24T22:46:19.000Z","updated_at":"2025-05-06T09:13:01.000Z","dependencies_parsed_at":"2023-02-16T06:01:11.504Z","dependency_job_id":"0f818a36-4fe9-45ec-a1aa-b15d740d00b5","html_url":"https://github.com/Martchus/syncthingtray","commit_stats":null,"previous_names":[],"tags_count":104,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Fsyncthingtray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Fsyncthingtray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Fsyncthingtray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Martchus%2Fsyncthingtray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Martchus","download_url":"https://codeload.github.com/Martchus/syncthingtray/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254092798,"owners_count":22013292,"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":["dolphin","hacktoberfest","plasma","plasmoid","qt-widgets","synchronization","syncthing","tray-application"],"created_at":"2024-09-24T20:25:24.401Z","updated_at":"2025-05-14T07:11:10.340Z","avatar_url":"https://github.com/Martchus.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Syncthing Tray\nSyncthing Tray provides a tray icon and further platform integrations for\n[Syncthing](https://github.com/syncthing/syncthing). Checkout the\n[website](https://martchus.github.io/syncthingtray) for an overview.\n\nThe following integrations are provided:\n\n* Tray application (using the Qt framework)\n* Context menu extension for the [Dolphin](https://www.kde.org/applications/system/dolphin) file manager\n* Plasmoid for [KDE Plasma](https://www.kde.org/plasma-desktop)\n* Command-line interface\n* Qt-ish C++ library\n\n---\n\nCheckout the [official forum thread](https://forum.syncthing.net/t/yet-another-syncthing-tray) for discussions\nand announcement of new features.\n\nThis README document currently serves as the only and main documentation. So read on for details about\nthe configuration. If you are not familiar with Syncthing itself already you should also have a look at\nthe [Syncthing documentation](https://docs.syncthing.net) as this README is only going to cover the\nSyncthing Tray integration.\n\nIssues can be created on GitHub but please read the \"[Known bugs and workarounds](#known-bugs-and-workarounds)\" section in this document\nbefore.\n\nSyncthing Tray works with Syncthing v1 (and probably v0). Note that Syncthing Tray is maintained, and\nupdates will be made to support future Syncthing versions as needed.\n\n## Supported platforms\nOfficial binaries are provided for Windows (for i686, x86_64 and aarch64) and GNU/Linux (for x86_64) and can be\ndownload from the [website](https://martchus.github.io/syncthingtray/#downloads-section) and the\n[release section on GitHub](https://github.com/Martchus/syncthingtray/releases). This is only a fraction of\nthe available downloads, though. I also provide further repositories for some GNU/Linux distributions. There are\nalso binaries/repositories provided by other distributors. For a list with links, checkout the\n\"[Download](#Download)\" section of this document.\n\nSyncthing Tray is known to work under:\n\n* Windows 10 and 11\n* KDE Plasma\n* Openbox using lxqt/LXDE or using Tint2\n* GTK-centered desktops such as Cinnamon, GNOME and Xfce (with caveats, see remarks below)\n* COSMIC (only simple tray menu works, see remarks below)\n* Awesome\n* i3\n* macOS\n* Deepin Desktop Environment\n* Sway/Swaybar/Waybar (with caveats, see remarks below)\n* Android (still experimental and in initial development)\n\nThis does *not* mean Syncthing Tray is actively tested on all those platforms or\ndesktop environments.\n\nFor Plasma 5 and 6, there is in addition to the Qt Widgets based version also a \"native\"\nPlasmoid. Note that the latest version of the Plasmoid generally also requires the\nlatest version of Plasma 5 or 6 as no testing on earlier versions is done. Use the Qt\nWidgets based version on other Plasma versions. Checkout the\n\"[Configuring Plasmoid](#configuring-plasmoid)\" section for further details.\n\nOn GTK-centered desktops have a look at the\n[Arch Wiki](https://wiki.archlinux.org/title/Uniform_look_for_Qt_and_GTK_applications)\nfor how to achieve a more native look and feel. Under GNOME one needs to install\n[an extension](https://github.com/ubuntu/gnome-shell-extension-appindicator) for tray icon support (unless\none's distribution already provides such an extension by default).\n\nLimitations of your system tray might affect Syncthing Tray. For instance when using the mentioned GNOME\nextension the Syncthing Tray UI shown in the screenshots below is only shown by *double*-clicking the icon.\nIf your system tray is unable to show the Syncthing Tray UI at all like on COSMIC you can still use Syncthing\nTray for the tray icon and basic functionality accessible via the menu.\n\nNote that under Wayland-based desktops there will be positioning issues. The Plasmoid is not affected\nby this, though.\n\nThe section \"[Known bugs and workarounds](#known-bugs-and-workarounds)\" below contains further information\nand workarounds for certain caveats like the positioning issues under Wayland.\n\n## Features\n* Provides quick access to most frequently used features but does not intend to replace the official web-based UI\n    * Check state of folders and devices\n    * Check current traffic statistics\n    * Display further details about folders and devices, like last file, last\n      scan, items out of sync, ...\n    * Display ongoing downloads\n    * Display Syncthing log\n    * Trigger re-scan of a specific folder or all folders at once\n    * Open a folder with the default file browser\n    * Pause/resume a specific device or all devices at once\n    * Pause/resume a specific folder\n    * View recent history of changes (done locally and remotely)\n* Shows \"desktop\" notifications\n    * The events to show notifications for can be configured\n    * Uses Qt's notification support or a D-Bus notification daemon directly\n* Provides a wizard for a quick setup\n* Allows monitoring the status of the Syncthing systemd unit and to start and stop it (see section\n  \"[Configuring systemd integration](#configuring-systemd-integration)\")\n* Provides an option to conveniently add the tray to the applications launched when the desktop environment starts\n* Can launch Syncthing automatically when started and display stdout/stderr (useful under Windows)\n* Browsing the global file tree and selecting items to add to ignore patterns.\n* Provides quick access to the official web-based UI\n    * Can be opened as regular browser tab\n    * Can be opened in a dedicated window utilizing either\n        * Qt WebEngine/WebKit\n        * the \"app mode\" of a Chromium-based browser (e.g. Chrome and Edge)\n* Allows switching quickly between multiple Syncthing instances\n* Also features a simple command line utility `syncthingctl`\n    * Check status\n    * Trigger rescan/pause/resume/restart\n    * Wait for idle\n    * View and modify raw configuration\n    * Supports Bash completion, even for folder and device names\n* Also bundles a KIO plugin which shows the status of a Syncthing folder and allows to trigger Syncthing actions\n  in the Dolphin file manager\n    * Rescan selected items\n    * Rescan entire Syncthing folder\n    * Pause/resume Syncthing folder\n    * See also the [screenshots below](#syncthing-actions-for-dolphin)\n* Allows building Syncthing as a library to run it in the same process as the tray/GUI\n* English and German localization\n\n## Does this launch or bundle Syncthing itself? What about my existing Syncthing installation?\nSyncthing Tray does *not* launch Syncthing itself by default. There should be no interference with your existing\nSyncthing installation. You might consider different configurations:\n\n* If you're happy how Syncthing is started on your system so far just tell Syncthing Tray to connect to your currently\n  running Syncthing instance in the settings. If you're currently starting Syncthing via systemd you might consider\n  enabling the systemd integration in the settings (see section \"[Configuring systemd integration](#configuring-systemd-integration)\").\n* If you would like Syncthing Tray to take care of starting Syncthing for you, you can use the Syncthing launcher\n  available in the settings. Note that this is *not* supported when using the Plasmoid.\n    * The Linux and Windows builds provided in the [release section on GitHub](https://github.com/Martchus/syncthingtray/releases)\n      come with a built-in version of Syncthing which you can consider to use. Keep in mind that automatic updates of Syncthing are\n      not possible this way.\n    * In any case you can simply point the launcher to the binary of Syncthing (which you have to download/install\n      separately).\n    * Checkout the \"[Configuring the built-in launcher](#configuring-the-built-in-launcher)\" section for further details.\n* It is also possible to let Syncthing Tray connect to a Syncthing instance running on a different machine.\n\nNote that the experimental UI tailored for mobile devices is more limited. So far it can only start a built-in\nversion of Syncthing or connect to an externally started Syncthing instance. It will set a custom config/data\ndirectory for Syncthing so any Syncthing instance launched via the mobile UI will not interfere with existing setups.\n\n## Installation and deinstallation\nCheckout [the website](https://martchus.github.io/syncthingtray/#downloads-section) for obtaining the executable\nor package. This README also lists more options and instructions for building from sources.\n\nIf you are using one of the package manager options you should follow the usual workflow of that package manager.\n\nOtherwise, you just have to extract the archive and launch the contained executable. Especially on Windows, please\nread the notes on the website before filing any issues. Note that automatic updates haven't been implemented yet.\nTo uninstall, just delete the executable again.\n\nFor further cleanup you may ensure that autostart is disabled (to avoid a dangling autostart entry). You may also\ndelete the configuration files (see \"[Location of the configuration file](#location-of-the-configuration-file)\"\nsection below).\n\n## Screenshots\nThe screenshots are not up-to-date.\n\n### Qt Widgets based GUI under Windows 11\n![Qt Widgets based GUI under Windows 11](/tray/resources/screenshots/windows-11.png?raw=true)\n\n### Qt Widgets based GUI under Openbox/Tint2 with dark Breeze theme\n![Qt Widgets based GUI under Openbox/Tint2](/tray/resources/screenshots/tint2-dark.png?raw=true)\n\n### Plasmoid (for KDE's Plasma shell)\n#### Light theme\n![Plasmoid (light theme)](/plasmoid/resources/screenshots/plasmoid-1.png?raw=true)\n\n#### Dark theme\n![Plasmoid (dark theme)](/plasmoid/resources/screenshots/plasmoid-2.png?raw=true)\n\n### Icon customization dialog\n![Plasmoid (customized icons)](/tray/resources/screenshots/custom-icons.png?raw=true)\n\n### Settings dialog\n![Settings dialog](/tray/resources/screenshots/settings.png?raw=true)\n\n### Web view\n![Web view](/tray/resources/screenshots/webview.png?raw=true)\n![Web view (dark)](/tray/resources/screenshots/webview-dark.png?raw=true)\n\n### Syncthing actions for Dolphin\n![Rescan/pause/status](/fileitemactionplugin/resources/screenshots/dolphin.png?raw=true)\n\n## General remarks on the configuration\nYou need to configure how Syncthing Tray should connect to Syncthing itself. The previous\nsection \"Does this launch or bundle Syncthing itself…\" mentions available options. Additionally,\na wizard is shown on the first launch which can guide though the configuration for common\nsetups. If you have dismissed the wizard you can still open it at any point via a button on the\ntop-right corner of the settings dialog.\n\nIt may be worthwhile to browse though the pages of the configuration dialog to tweak Syncthing\nTray to your needs, e.g. to turn off notification you may find annoying.\n\n### Location of the configuration file\nThe configuration file is usually located under `~/.config/syncthingtray.ini` on GNU/Linux and\nunder `%appdata%\\syncthingtray.ini` on Windows. For other platforms and further details,\ncheckout the\n[Qt documentation](https://doc.qt.io/qt-6/qsettings.html#locations-where-application-settings-are-stored)\n(Syncthing Tray uses the \"IniFormat\"). For portable installations it is also possible to place\nan empty file called `syncthingtray.ini` directly next to the executable.\n\nYou may remove the configuration file under the mentioned location to start from scratch.\n\nNote that this only counts for Syncthing Tray. For Syncthing itself, checkout\n[its own documentation](https://docs.syncthing.net/users/config.html).\n\nThe Plasmoid is using the same configuration file but in addition also Plasma's configuration\nmanagement for settings specific to a concrete instance of the Plasmoid.\n\nThe experimental UI tailored for mobile devices is using a distinct configuration which is\nlocated under `~/.config/Martchus/Syncthing Tray` on GNU/Linux and\n`/storage/emulated/0/Android/data/io.github.martchus.syncthingtray` on Android and\n`%appdata%\\Martchus\\Syncthing Tray` on Windows. The configuration and database of Syncthing\nitself are also located within this directory when Syncthing is launched via the mobile UI.\n\n## Single-instance behavior and launch options\nThis section does *not* apply to the [Android app](#using-the-android-app), the\n[Plasmoid](#configuring-plasmoid) and the\n[Dolphin integration](#configuring-dolphin-integration).\n\nSyncthing Tray is a single-instance application. So if you try to start a second instance the\nsecond process will only pass arguments to the process that is already running and exit. This\nis useful as is prevents one from accidentally launching two Syncthing instances at the same\ntime via the built-in Syncthing launcher. It also allows showing the triggering certain\nactions via certain launch options, see \"[Configuring hotkeys](#configuring-hotkeys)\" for\ndetails.\n\nBesides that there are a few other notable launch options:\n\n* `--connection [config name] …`:\n  Shows tray icons for the specified connection configurations (instead of just a single tray\n  icon for the primary connection configuration). Syncthing Tray will still behave as a\n  single-instance application so a single process will handle all those tray icons and the\n  built-in Syncthing launcher will launch Syncthing only once.\n* `--replace`:\n  Changes the single-instance behavior so that the already running process is existing and\n  the second process continues to run. This is useful to restart Syncthing Tray after\n  updating.\n* `--new-instance`:\n  Disables the single-instance behavior. This can be useful to run two instances of\n  Syncthing itself via the built-in launcher in parallel. This only makes sense if those\n  two Syncthing instances use a different configuration/database which can be achieved with\n  a [portable configuration](#location-of-the-configuration-file).\n* `--single-instance`:\n  Avoids the creation of a second tray icon if Syncthing Tray is already running. (Without\n  this option, Syncthing Tray will still show another tray icon despite its single-instance\n  behavior.)\n* `--help`:\n  Prints all launch options.\n\nThose were just the options of the tray application. Checkout the\n\"[Using the command-line interface](#using-the-command-line-interface)\" section for an\noverview of available tooling for the command-line.\n\n## Configuring Plasmoid\nThe Plasmoid requires installing Syncthing Tray via distribution-specific packaging. It is\n*not* available via the generic GNU/Linux download or the Flatpak. Checkout the relevant notes\non the [downloads page](https://martchus.github.io/syncthingtray/#downloads-section) for\navailable options and details on package names. For further information about supported versions\nof Plasma, checkout the \"[Supported platforms](#supported-platforms)\" section.\n\nThe built-in Syncthing launcher is not available in the Plasmoid as it is recommended to rely on\nthe systemd integration instead.\n\nOnce installed, Plasma might need to be restarted for the Plasmoid to be selectable.\n\nThe Plasmoid can be added/shown in two different ways:\n\n1. It can be shown as part of the system tray Plasmoid.\n    * This is likely the preferred way of showing it and may also happen by default.\n    * Whether the Plasmoid is shown as part of the system tray Plasmoid can be configured\n      in the settings of the system tray Plasmoid. You can access the settings of the\n      system tray Plasmoid from its context-menu which can be opened by right-clicking on\n      the arrow for expanding/collapsing.\n    * This way it is also possible to show the icon only in certain states by choosing to\n      show it only when important and selecting the states in the Plasmoid's settings.\n    * Configuring the size has no effect when the Plasmoid is displayed as part of the\n      system tray Plasmoid.\n2. It can be added to a panel or the desktop like any other Plasmoid.\n\nThis allows you to add multiple instances of the Plasmoid but it is recommended to pick\nonly one place. For that it makes also most sense to ensure the autostart of the\nstand-alone tray application is disabled. Otherwise you would end up having two icons\nat the same time (one of the Plasmoid and one of the stand-alone application).\n\nThe Plasmoid cannot be closed via its context menu like the stand-alone application.\nInstead, you have to disable it in the settings of the system tray Plasmoid as explained\nbefore. If you have added the Plasmoid to a panel or the desktop you can delete it like\nany other Plasmoid.\n\nIn case the Plasmoid won't show up, checkout the\n\"[Troubleshooting KDE integration](#troubleshooting-kde-integration)\" section below for\nfurther help.\n\n## Configuring Dolphin integration\nThe Dolphin integration can be enabled/disabled in Dolphin's context menu settings. It will\nread Syncthing's API key automatically from its config file. If your Syncthing config file is\nnot in the default location you need to select it via the corresponding menu action.\n\n## Configuring systemd integration\nThe next section explains what it is good for and how to use it. If it doesn't work on your\nsystem please read the subsequent sections as well before filing an issue.\n\n### Using the systemd integration\nWith the system configured correctly and systemd support enabled at build-time the following\nfeatures are available:\n\n* Starting and stopping the systemd unit of Syncthing\n* Consider the unit status when connecting to the local instance to prevent connection attempts\n  when Syncthing isn't running anyways\n* Detect when the system has just been resumed from standby to avoid the \"Disconnect\"\n  notification in that case\n\nHowever, these features are optional. To use them they must be enabled in the settings dialog\nfirst.\n\nIt is recommended to enable \"Consider unit status …\". Note that Syncthing might still not be immediately\nready to serve API requests when the systemd unit turns active. Hence it is still required to configure\na re-connect interval. The re-connect interval will only be in effect while the systemd unit is active.\nSo despite the re-connect interval there will be no connection attempts while the systemd unit is\ninactive. That's all the systemd integration can optimize in that regard.\n\nBe aware that Syncthing Tray assumes by default that the systemd unit is a\n[user unit](https://wiki.archlinux.org/index.php/Systemd/User). If you are using\na regular system-wide unit (including those ending with `…@username`) you need to enable the\n\"System unit\" checkbox in the settings. Note that starting and stopping the system-wide Syncthing\nunit requires authorization (systemd can ask through PolicyKit).\n\n### Required system configuration\nThe communication between Syncthing Tray and systemd is implemented using systemd's D-Bus service.\nThat means systemd's D-Bus service (which is called `org.freedesktop.systemd1`) must be running on\nyour D-Bus. For [user units](https://wiki.archlinux.org/index.php/Systemd/User) the session D-Bus is\nrelevant and for regular units (including those ending with `…@username`) the system D-Bus is relevant.\n\nIt seems that systemd's D-Bus service is only available when D-Bus itself is started via systemd. That\nis by default the case under Arch Linux and openSUSE and likely most other modern distributions where\nit is usually started via \"socket activation\" (e.g. `/usr/lib/systemd/user/dbus.socket` for the session\nD-Bus).\n\nAll of this counts for the session D-Bus *and* for the system D-Bus although the startup of the session\nD-Bus can be screwed up particularly easy. One easy way to screw it up is to start a second instance of\nthe session D-Bus manually e.g. via `dbus-run-session`. When starting the session D-Bus this way the\nsystemd integration will *not* work and you will likely end up with two session D-Bus processes. It is\nalso worth noticing that you do *not* need to set the `DBUS_SESSION_BUS_ADDRESS` variable manually\nbecause the systemd file `dbus.socket` should take care of this.\n\nNote that the Plasma Wayland session screwed things up in the way I've described. This has been fixed with\n[Only spawn dbus-run-session if there isn't a session already](https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/128)\nbut this change might not be available on older distributions.\n\n### Build-time configuration\nThe systemd integration can be explicitly enabled/disabled at compile time by adding\n`-DSYSTEMD_SUPPORT=ON/OFF` to the CMake arguments. If the systemd integration does not work be sure your\nversion of Syncthing Tray has been compiled with systemd support.\n\nNote for distributors: There will be no hard dependency to systemd in any case. Distributions supporting\nalternative init systems do *not* need to provide differently configured versions of Syncthing Tray.\nDisabling the systemd integration is mainly intended for systems which do not use systemd at all (e.g.\nWindows and MacOS).\n\n## Configuring the built-in launcher\nThe built-in launcher can be accessed and configured within the settings dialog. The GUI should be\nself-explaining.\n\nIt is recommended to enable \"Consider process status …\". Note that Syncthing might not be immediately\nready to serve API requests when started. Hence it is still required to configure a re-connect interval.\nThe re-connect interval will only be in effect while the Syncthing process is running. So despite the\nre-connect interval there will be no connection attempts while the Syncthing process is not running.\n\n## Using the command-line interface\nSyncthing Tray provides two command-line interfaces:\n\n* The separate executable `syncthingctl` allows to interact with a running instance of Syncthing to\n  trigger certain actions like rescans, editing the Syncthing config and more. It complements\n  Syncthing's own command-line interface. Invoke `syncthingctl --help` for details.\n* The GUI/tray executable `syncthingtray` also exposes a command-line interface to interact with\n  a running instance of the GUI/tray. Invoke `syncthingtray --help` for details. Additional remarks:\n    * If Syncthing itself is built into Syncthing Tray (like the Linux and Windows builds found in\n      the release-section on GitHub) then Syncthing's own command-line interface is exposed via\n      `syncthingtray` as well.\n    * On Windows, you'll have to use the `syncthingtray-cli` executable to see output in the terminal.\n    * The experimental mobile UI can be launched on the desktop with the `qt-quick-gui` sub-command\n      when Syncthing Tray was built with support for it.\n\n## Configuring hotkeys\nUse the same approach as for launching an arbitrary application via a hotkey in your graphical\nenvironment. Make it invoke\n\n* `syncthingtray --trigger` to show the Qt Widgets based tray menu.\n* `syncthingtray --webui` to show the web UI.\n* `syncthingctl [...]` to trigger a particular action. See `syncthingctl -h` for details.\n\nThe Plasmoid can be shown via a hot-key as well by configuring one in the Plasmoid settings.\n\n## Using the Android app\nThe Android app requires Android 9 or later. It is mainly tested on Android 14 and 15, though.\nDepending on the Android version and vendor-specific limitations you might run into permission\nerrors and problems with the app being stopped by the OS. For me it works well enough on a\nthree year old average Samsung device. It probably works on most recent phones except very\nlow-end devices.\n\n**The Android app is still experimental.** Use it with care and create backups of your\nconfiguration and data before trying it. No builds are provided at this point so you have to\n[build it from sources](https://github.com/Martchus/cpp-utilities/blob/master/README.md#remarks-about-building-for-android).\nSee the section \"[Caveats on Android](#caveats-on-android)\" below for further limitations.\n\nIf you're starting from scratch you can simply install and start the app. Otherwise, checkout\nthe sections about migrating after reading the general remarks.\n\nIn any case, you need to give the app *notification permission* and *storage permission* via the\napp settings of Android. The start page of the app shows \"Request … permission\" actions at the\ntop for opening the app settings if the permissions haven't been granted yet.\n\nThe app will start Syncthing automatically by default. Once Syncthing is running you can add\ndevices and folders as usual. The official Syncthing documentation applies. There are also many\nhelp texts provided within the app itself. A few additional remarks:\n\n* You can select device IDs of nearby devices from the combo box when adding a new device. So\n  there's usually no need to copy \u0026 paste device IDs. If you nevertheless need to scan a QR-code\n  I recommended to simply use your camera app to scan and copy the QR-code information and paste\n  it into the Syncthing Tray app. So far there is no in-app QR-code scanning.\n* You can leave the device name empty to use the name the device advertises. The device name can\n  also be changed later (in contrast to IDs).\n* If you have already another Syncthing app installed or you have an existing configuration from\n  another device, read the next sections for testing/migrating.\n* The app does not automatically trigger media library rescans, so e.g. synchronized music might\n  not show up immediately in your music app. However, you can trigger a rescan manually if needed.\n  You can do this per folder from the context menu on the folders page.\n* It is highly recommended to enable the option \"Ignore permissions\" on all folders under Android\n  and when certain file systems are used. The app enables this option therefore by default in\n  such cases when a path for a new folder has been selected. You can still disable the option\n  again manually.\n\n### Testing the app without migrating\nTo only test the app without migrating your setup you can follow the steps of this section. Note\nthat changes done via the app *will* affect your existing Syncthing setup. You are *not* working\nin read-only mode or on a copy.\n\n0. Start the Syncthing app you are currently using (e.g. the Syncthing-Fork app) and ensure that\n   Syncthing itself is running as well.\n1. Lookup the listening address and API key in the options of the app you are currently using.\n   Alternatively, do an export/backup in the app you are currently using. This might be a good\n   idea anyway. The backup directory will contain the file `config.xml` which also contains the\n   listening address and API key. The export will also contain the HTTPs certificate which you\n   need if HTTPs is used.\n2. Install and start the Syncthing app from Syncthing Tray.\n3. Ensure that running Syncthing is disabled under the runtime condition settings.\n4. Configure the information from step 1 in the connection settings. When using HTTPs the\n   certificate is required.\n5. After applying all settings, the app UI can be used to control your existing Syncthing setup.\n\n### Migrating data from your existing app setup\nYou can follow these steps when switching apps on the same device. If you decided to import only\nspecific devices and folders (recommended) you can still keep using your existing app setup\n(keeping both apps installed in parallel).\n\nYou can also follow these steps when setting up Syncthing on a new device based on the\nconfiguration from another device.\n\n0. Start the Syncthing app you are currently using (e.g. the Syncthing-Fork app) and wait until\n   everything is in-sync.\n1. Do an export in the app you are currently using. This will populate a directory on the internal\n   or external storage.\n2. Stop the Syncthing app you are currently using.\n3. Start the Syncthing app from Syncthing Tray and enable running Syncthing in the app settings.\n4. Import the config and data from step 1 in the app settings. When clicking on \"Import …\" you\n   will be prompted to select the directory you stored the export made in step 1. After selecting\n   the directory no changes will be made immediately; the app will show you what it found and\n   allow you to and select what parts you want to import.\n    * It is recommended to select only specific folders and devices. Then the Syncthing Tray app\n      will keep its current device ID. This means it will appear as a new device on other devices.\n      So you will have to add it on other devices as a new device and accept sharing relevant\n      folders.\n        * All devices and folders will be added in paused state. So you can still tweak settings\n          and ignore patterns before any scanning or syncing takes place.\n        * Changing folder paths is not possible after the import anymore, though. Therefore you\n          have to change the paths of the folders during the import if necassary.\n        * When setting up a completely new device you can simply select/create empty folders\n          where you want the imported folders to be. Then Syncthing will pull the contents from\n          other devices once you unpause the folders/devices.\n    * It is also possible to do a full import. This will import the Syncthing configuration and\n      database from the export. That means the device ID from your existing app setup will be\n      reused. In fact, the entire Syncthing configuration and database will be reused. So the\n      setup will be identical to how it was before - except that now a different app is used.\n      That also means that no changes are required on other devices. *The big caveat of this method\n      is that you should not start the other app anymore unless you re-import the config/database\n      there and make sure the app from Syncthing Tray is stopped. Reusing the Syncthing database\n      is also generally considered dangerious and therefore not recommended when setting up a new\n      device.*\n\n### Differences between Syncthing Tray on Android and the Syncthing-Fork app\n* The [Syncthing-Fork](https://github.com/Catfriend1/syncthing-android) app is generally more\n  mature/stable. Syncthing Tray has still many caveats on Android (see next section).\n* The Syncthing-Fork app uses Android's native UI framework and therefore has a more native UI\n  than Syncthing Tray which uses Qt. The UI of Syncthing Tray still follows the Material style\n  guidelines and provides native file dialogs and notifications.\n* The UI of Syncthing Tray on Android is more in-line with the UI of Syncthing Tray on the desktop\n  and the official web-based UI.\n* The UI of Syncthing Tray on Android allows changing all advanced settings and has built-in help\n  texts for many options in accordance with the official Syncthing documentation.\n* Syncthing Tray allows browsing the global file tree of a folder. Items can be selected and added\n  to ignore patterns.\n* The Syncthing-Fork app provides many features that haven't been implemented yet by Syncthing Tray,\n  e.g. advanced run conditions. Syncthing Tray allows stopping Syncthing on metered network\n  connections, though.\n* The Syncthing-Fork app works probably better on older or very low-budget devices.\n      \n### Caveats on Android\nWhile Syncthing Tray basically works on Android, there are still some unresolved issues:\n\n* A foreground service is used but Syncthing is nevertheless terminated when the activity is\n  destroyed. Decoupling the activity from the rest of the application requires changes in Qt. It\n  will probably become feasible as of Qt 6.9.\n* All native libraries need to be extracted taking quite some space on the device. This will be\n  fixed with Qt 6.9.\n* The performance can be problematic due to the use of FUSE as of Android 11. With\n  [FUSE Passthrough](https://source.android.com/docs/core/storage/fuse-passthrough) things have\n  improved but especially if one has many files in one directory the performance is still bad.\n  There is nothing one can do about it except storing the data in app's private directory. While\n  this is possible it of course doesn't cover all use cases. A file provider to be able to share\n  the private app directory also still needs to be implemented.\n* Media rescans need to be triggered manually.\n* There are probably still many small UI bugs in the Qt Quick based UI used on Android.\n* The Syncthing home directory needs to be within the private directory of the app on the main\n  storage. The app allows moving the home directory to other locations, e.g. the private directory\n  of the app on the SD card. However, Syncthing fails to open its database on other locations.\n* Not all features the official web UI offers have been implemented in the Qt Quick based UI yet.\n  One can easily open the official web UI in a web browser, though.\n\n## Download\nCheckout the [download section on the website](https://martchus.github.io/syncthingtray/#downloads-section) for an overview.\nKeep reading here for a more detailed list.\n\n### Source\nSee the [release section on GitHub](https://github.com/Martchus/syncthingtray/releases).\n\n### Packages and binaries\n* Arch Linux\n    * for PKGBUILDs checkout [my GitHub repository](https://github.com/Martchus/PKGBUILDs) or\n      [the AUR](https://aur.archlinux.org/packages?SeB=m\u0026K=Martchus)\n    * there is also a [binary repository](https://martchus.dyn.f3l.de/repo/arch/ownstuff)\n* Tumbleweed, Leap, Fedora\n    * RPM \\*.spec files and binaries are available via openSUSE Build Service\n        * remarks\n            * Be sure to add the repository that matches the version of your OS and to keep it\n              in sync when upgrading.\n            * The linked download pages might be incomplete, use the repositories URL for a full\n              list.\n            * Old packages might remain as leftovers when upgrading and need to be cleaned up\n              manually, e.g. `zypper rm libsyncthingconnector1_1_20 libsyncthingmodel1_1_20 libsyncthingwidgets1_1_20`.\n        * latest releases: [download page](https://software.opensuse.org/download.html?project=home:mkittler\u0026package=syncthingtray),\n          [repositories URL](https://download.opensuse.org/repositories/home:/mkittler),\n          [project page](https://build.opensuse.org/project/show/home:mkittler)\n        * Git master: [download page](https://software.opensuse.org/download.html?project=home:mkittler:vcs\u0026package=syncthingtray),\n          [repositories URL](https://download.opensuse.org/repositories/home:/mkittler:/vcs),\n          [project page](https://build.opensuse.org/project/show/home:mkittler:vcs)\n    * available split packages\n        * `syncthingtray`/`syncthingtray-qt6`: Qt-widgets based GUI\n        * `syncthingplasmoid`/`syncthingplasmoid-qt6`: applet/plasmoid for Plasma desktop\n        * `syncthingfileitemaction`/`syncthingfileitemaction-qt6`: Dolphin/KIO integration\n        * `syncthingctl`/`syncthingctl-qt6`: command-line interface\n* Debian ≥12 \"bookworm\" and its derivatives (Ubuntu, Pop!_OS, etc, but not Neon)\n    * `sudo apt install syncthingtray-kde-plasma` if using KDE Plasma; otherwise, `sudo apt install syncthingtray`.\n    * Installation from a Software Centre such as [GNOME Software](https://apps.gnome.org/en-GB/app/org.gnome.Software) or\n      [Discover](https://apps.kde.org/en-gb/discover/) should be possible as well.\n* Exherbo\n    * packages for my other project \"Tag Editor\" and dependencies could serve as a base and are provided\n      by [the platypus repository](https://git.exherbo.org/summer/packages/media-sound/tageditor)\n* Gentoo\n    * there is a package in [Case_Of's overlay](https://codeberg.org/Case_Of/gentoo-overlay)\n* NixOS\n    * the package syncthingtray is available from the official repositories\n* Void Linux\n    * available as split packages from the\n      [official repositories](https://voidlinux.org/packages/?q=syncthingtray):\n        * `syncthingtray`: GUI and command-line interface\n        * `syncthingtray-plasma`: applet/plasmoid for Plasma desktop\n        * `syncthingtray-dolphin`: Dolphin/KIO integration\n* Other GNU/Linux systems\n    * for generic, self-contained binaries checkout the [release section on GitHub](https://github.com/Martchus/syncthingtray/releases)\n        * Requires glibc\u003e=2.26, OpenGL and libX11\n            * openSUSE Leap 15, Fedora 27, Debian 10 and Ubuntu 18.04 are recent enough (be sure\n              the package `libopengl0` is installed on Debian/Ubuntu)\n        * Supports X11 and Wayland (set the environment variable `QT_QPA_PLATFORM=xcb` to disable\n          native Wayland support if it does not work on your system)\n        * Binaries are signed with the GPG key\n          [`B9E36A7275FC61B464B67907E06FE8F53CDC6A4C`](https://keyserver.ubuntu.com/pks/lookup?search=B9E36A7275FC61B464B67907E06FE8F53CDC6A4C\u0026fingerprint=on\u0026op=index).\n    * a Flatpak is hosted on [Flathub](https://flathub.org/apps/io.github.martchus.syncthingtray)\n        * Read the [README of the Flatpak](https://github.com/flathub/io.github.martchus.syncthingtray/blob/master/README.md) for\n          caveats and workarounds\n        * File any Flatpak-specific issues on [the Flatpak repository](https://github.com/flathub/io.github.martchus.syncthingtray/issues)\n* Windows\n    * for binaries checkout the [release section on GitHub](https://github.com/Martchus/syncthingtray/releases)\n        * Windows SmartScreen will likely block the execution (you'll get a window saying \"Windows protected your PC\");\n          right click on the executable, select properties and tick the checkbox to allow the execution\n        * Antivirus software often **wrongly** considers the executable harmful. This is a known problem. Please don't create\n          issues about it.\n        * The Qt 6 based version is stable and preferable but only supports Windows 10 version 1809 and newer.\n        * The Qt 5 based version should still work on older versions down to Windows 7 although this is not regularly checked.\n            * On Windows 7 the bundled Go/Syncthing will nevertheless be too new; use a version of Go/Syncthing that is *older*\n              than 1.21/1.27.0 instead.\n        * The Universal CRT needs to be [installed](https://learn.microsoft.com/en-us/cpp/windows/universal-crt-deployment#central-deployment).\n        * Binaries are signed with the GPG key\n          [`B9E36A7275FC61B464B67907E06FE8F53CDC6A4C`](https://keyserver.ubuntu.com/pks/lookup?search=B9E36A7275FC61B464B67907E06FE8F53CDC6A4C\u0026fingerprint=on\u0026op=index).\n    * or, using Winget, type `winget install Martchus.syncthingtray` in a Command Prompt window.\n    * or, using [Scoop](https://scoop.sh), type `scoop bucket add extras \u0026 scoop install extras/syncthingtray`.\n    * or, via this [Chocolatey package](https://community.chocolatey.org/packages/syncthingtray), type `choco install syncthingtray`.\n    * for mingw-w64 PKGBUILDs checkout [my GitHub repository](https://github.com/Martchus/PKGBUILDs)\n* FreeBSD\n    * the package syncthingtray is available from [FreeBSD Ports](https://www.freshports.org/deskutils/syncthingtray)\n* Mac OS X/macOS\n    * the package syncthingtray is available from [MacPorts](https://ports.macports.org/port/syncthingtray/)\n\n## Build instructions\nThe application depends on [c++utilities](https://github.com/Martchus/cpp-utilities),\n[qtutilities](https://github.com/Martchus/qtutilities) and\n[qtforkawesome](https://github.com/Martchus/qtforkawesome) and is built the same way as these libraries.\nFor basic instructions and platform-specific details checkout the README file of\n[c++utilities](https://github.com/Martchus/cpp-utilities).\n\nTo avoid building c++utilities/qtutilities/qtforkawesome separately, follow the instructions under\n\"[Building this straight](#Building-this-straight)\". There's also documentation about\n[various build variables](https://github.com/Martchus/cpp-utilities/blob/master/doc/buildvariables.md) which\ncan be passed to CMake to influence the build.\n\n### Further dependencies\nThe following Qt modules are required (only the latest Qt 5 and Qt 6 version tested): Qt Core, Qt Concurrent,\nQt Network, Qt D-Bus, Qt Gui, Qt Widgets, Qt Svg, Qt WebEngineWidgets/WebKitWidgets\n\nIt is recommended to use at least Qt 5.14 to avoid limitations in previous versions (see\n\"[Known bugs](#known-bugs-and-workarounds)\" section).\n\nThe built-in web view and therefore the modules WebEngineWidgets/WebKitWidgets are optional (see\nsection \"[Select Qt module for web view and JavaScript](#select-qt-module-for-web-view-and-javascript)\").\n\nThe Qt Quick UI needs at least Qt 6.8 and also additional Qt modules found in the Qt Declarative repository.\nIt also contains experimental code for a built-in web view which uses the Qt WebView module. This is optional\nand not used at this point.\n\nWhen building for Android at least Qt 6.9 is required.\n\nTo build the plugin for Dolphin integration KIO is also required. To skip building the plugin,\nadd `-DNO_FILE_ITEM_ACTION_PLUGIN:BOOL=ON` to the CMake arguments.\n\nTo build the Plasmoid for the Plasma desktop, the Qt module QML and the KDE Frameworks module Plasma are\nrequired as well. Additionally, the Plasmoid requires the latest Qt version (5.15) for certain Qt Quick features.\nTo skip building the Plasmoid, add `-DNO_PLASMOID:BOOL=ON` to the CMake arguments.\n\nTo specify the major Qt version to use, set `QT_PACKAGE_PREFIX` (e.g. add `-DQT_PACKAGE_PREFIX:STRING=Qt6`\nto the CMake arguments). There's also `KF_PACKAGE_PREFIX` for KDE dependencies. Note that KDE integrations\nalways require the same major Qt version as your KDE installation uses.\n\n---\n\nThe following Boost libraries are required: `Boost.Asio`, `Boost.Process`, `Boost.Filesystem`\n\nThe launcher uses these libraries by default to handle sub processes correctly (and avoid leftover processes).\nAdd `-DUSE_BOOST_PROCESS:BOOL:OFF` to the CMake arguments to get rid of the dependency to Boost libraries.\nThis disables handling sub processes and `QProcess` (from Qt Core) is used instead.\n\n---\n\nTo build Syncthing itself as a library Go is required and Syncthing needs to be checked out as a Git submodule.\nCheckout the [documentation of Syncthing itself](https://docs.syncthing.net/dev/building#prerequisites) for\ndetails.\n\nSometimes it can be useful to use a different version of Go then what is provided by the packaging one would\nnormally use. To download and install a different version of Go into `GOPATH` one can invoke the following\ncommand:\n\n```\ngo install golang.org/dl/go1.22.11@latest \u0026\u0026 $GOPATH/src/go/bin/go1.22.11 download`\n```\n\nCheckout the [release history of Go](https://go.dev/doc/devel/release) for available versions.\n\nThen the version can be used by adding `-DGO_BIN=$GOPATH/bin/go1.22.11` to the CMake arguments. It is not\nnecassary to clean an existing build directly. All relevant parts will be re-built as necassary with the\nnew version.\n\n---\n\nIt is also possible to build only the CLI (`syncthingctl`) by adding `-DNO_MODEL:BOOL=ON` and\n`-DNO_FILE_ITEM_ACTION_PLUGIN:BOOL=ON` to the CMake arguments. Then only the Qt modules `core`,\n`network` and `dbus` are required.\n\n---\n\nTo get rid of systemd support, add `-DENABLE_SYSTEMD_SUPPORT_BY_DEFAULT:BOOL=OFF` to the CMake arguments.\nIn this case the Qt module `dbus` is not required anymore. Note that there is no hard dependency\nto systemd in any case.\n\n---\n\nBuilding the testsuite requires CppUnit and Syncthing itself. Tests will spawn (and eventually terminate)\na test instance of Syncthing that does not affect a possibly existing Syncthing setup on the build host.\n\n### Building this straight\n0. Install (preferably the latest version of) the GCC toolchain or Clang, the required Qt modules,\n   iconv, CMake and Ninja.\n1. Get the sources. For the latest version from Git clone the following repositories:\n   ```\n   cd \"$SOURCES\"\n   export MSYS=winsymlinks:nativestrict # only required when using MSYS2\n   git clone -c core.symlinks=true https://github.com/Martchus/cpp-utilities.git c++utilities\n   git clone -c core.symlinks=true https://github.com/Martchus/qtutilities.git\n   git clone -c core.symlinks=true https://github.com/Martchus/qtforkawesome.git\n   git clone -c core.symlinks=true https://github.com/ForkAwesome/Fork-Awesome.git forkawesome\n   git clone -c core.symlinks=true https://github.com/Martchus/syncthingtray.git\n   git clone -c core.symlinks=true https://github.com/Martchus/subdirs.git\n   ```\n   Note that `core.symlinks=true` is only required under Windows to handle symlinks correctly. This requires a\n   recent Git version and a filesystem which supports symlinks (NTFS works). Additionally, you need to\n   [enable Windows Developer Mode](https://learn.microsoft.com/en-us/gaming/game-bar/guide/developer-mode).\n   If you run into \"not found\" errors on symlink creation use `git reset --hard` within the repository to\n   fix this.\n2. Configure the build\n   ```\n   cd \"$BUILD_DIR\"\n   cmake \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DCMAKE_INSTALL_PREFIX=\"/install/prefix\" \\\n    -DFORK_AWESOME_FONT_FILE=\"$SOURCES/forkawesome/fonts/forkawesome-webfont.woff2\" \\\n    -DFORK_AWESOME_ICON_DEFINITIONS=\"$SOURCES/forkawesome/src/icons/icons.yml\" \\\n    \"$SOURCES/subdirs/syncthingtray\"\n   ```\n    * Replace `/install/prefix` with the directory where you want to install.\n    * Checkout the \"[Providing the font file](https://github.com/Martchus/qtforkawesome/#providing-the-font-file)\"\n      section of qtforkawesome's README for details regarding the\n      ForkAwesome-related parameters.\n3. Build and install everything in one step:\n   ```\n   cd \"$BUILD_DIR\"\n   ninja install\n   ```\n    * If the install directory is not writable, do **not** conduct the build as root. Instead, set `DESTDIR` to a\n      writable location (e.g. `DESTDIR=\"temporary/install/dir\" ninja install`) and move the files from there to\n      the desired location afterwards.\n\n### Select Qt module for web view and JavaScript\n* Add `-DWEBVIEW_PROVIDER:STRING=webkit/webengine/none` to the CMake arguments to use either Qt WebKit (works with\n  'revived' version as well), Qt WebEngine or no web view at all. If no web view is used, the Syncthing web UI is\n  opened in the default web browser. Otherwise the user can choose between the built-in web view and the web browser.\n  Note that this is only about the Qt Widgets based UI. The Qt Quick based UI uses Qt WebView if available.\n* Add `-DJS_PROVIDER:STRING=script/qml/none` to the CMake arguments to use either Qt Script, Qt QML or no JavaScript\n  engine at all. If no JavaScript engine is used, the CLI does not support scripting configuration changes.\n\n### Troubleshooting KDE integration\nAll KDE integrations are provided for KDE 5 and 6. The Qt version you have built Syncthing Tray against\nmust match the KDE version you want to build the integrations for.\n\nIf the Dolphin integration or the Plasmoid does not work, check whether the files for those components\nhave been installed in the right directories.\n\nFor instance, under Tumbleweed it looks like this for the Plasmoid:\n```\n/usr/lib64/qt5/plugins/plasma/applets/libsyncthingplasmoid.so\n/usr/share/kservices5/plasma-applet-martchus.syncthingplasmoid.desktop\n/usr/share/plasma/plasmoids/martchus.syncthingplasmoid/contents/ui/*.qml\n/usr/share/plasma/plasmoids/martchus.syncthingplasmoid/metadata.desktop\n/usr/share/plasma/plasmoids/martchus.syncthingplasmoid/metadata.json\n\n```\n\nThe files for the Dolphin integration look like this under Tumbleweed:\n```\n/usr/lib64/qt5/plugins/libsyncthingfileitemaction.so\n/usr/share/kservices5/syncthingfileitemaction.desktop\n```\n\nThese examples were for KDE 5. It looks a bit different for KDE 6. Checkout my Arch Linux and\nopenSUSE packaging for further examples.\n\nThe directory where the `*.so` file needs to be installed to, seems to differ from distribution to\ndistribution. The right directory for your distribution can be queried using qmake using, e.g.\n`qmake-qt5 -query QT_INSTALL_PLUGINS` or `qmake6 -query QT_INSTALL_PLUGINS` depending on the Qt\nversion. In doubt, just look where other Qt plugins are stored.\n\nThe build system is able to do that query automatically. In case this does not work, it is also\npossible to specify the directory manually, e.g. for Tumbleweed one would add\n`-DQT_PLUGIN_DIR=/usr/lib64/qt6/plugins` to the CMake arguments.\n\n---\n\nAlso be sure that the version of the Plasma framework the Plasmoid was built against is *not* newer\nthan the version actually installed on the system. This can happen if repositories are misconfigured,\ne.g. when using Fedora 39 but adding the Fedora 40 repo.\n\n---\n\nIf the Plasmoid still won't load, checkout the log of `plasmashell`/`plasmoidviewer`/`plasmawindowed`.\nAlso consider using strace to find out at which paths the shell is looking for `*.desktop` and\n`*.so` files.\n\nFor a development setup of the KDE integration, continue reading the subsequent section.\n\n## Contributing, developing, debugging\n### Translations\nCurrently translations for English and German are available. Qt's built-in localization/translation\nframework is used under the hood.\n\nNote that `syncthingctl` has not been internationalized yet so it supports only English.\n\n#### Add a new locale\nTranslations for further locales can be added quite easily:\n\n1. Append a new translation file for the desired locale to the `TS_FILES` list\n   in `connector/CMakeLists.txt`, `model/CMakeLists.txt`, `widgets/CMakeLists.txt`,\n   `fileitemactionplugin/CMakeLists.txt`, `plasmoid/CMakeLists.txt` and\n   `tray/CMakeLists.txt`.\n2. Configure a new build, e.g. follow steps under *[Building this straight](#Building-this-straight)*.\n3. Conduct a full build or generate only translation files via the `translations` target.\n4. New translation files should have been created by the build system under\n   `connector/translations`, `model/translations`, `widgets/translations`,\n   `fileitemactionplugin/translations`, `plasmoid/translations` and\n   `tray/translations` and the `translations` folder of `qtutilities`.\n5. Open the files with Qt Linguist to add translations. Qt Linguist is part of\n   the [Qt Tools repository](http://code.qt.io/cgit/qt/qttools.git/) and its usage\n   is [well documented](http://doc.qt.io/qt-5/linguist-translators.html).\n\n#### Extend/update existing translations\n* For English, update the corresponding string literals within the source code.\n* If necassary, sync the translation files with the source code like in step `2.`/`3.` of\n  \"[Add a new locale](#Add-a-new-locale)\". Check that no translations have been lost (except ones which are no\n  longer required of course).\n* Change the strings within the translation files found within the `translations`\n  directories like in step `4.`/`5.` of \"[Add a new locale](#Add-a-new-locale)\".\n\n#### Remarks\n* Syncthing Tray displays also text from [qtutilities](https://github.com/Martchus/qtutilities).\n  Hence it makes sense adding translations there as well (following the same procedure).\n* The CLI `syncthingctl` currently does not support translations.\n\n### Using backend libraries\nThe contained backend libraries (which provide connecting to Syncthing, data models and more) are written for internal\nuse within the components contained by this repository.\n\nHence those libraries do *not* provide a stable ABI/API. If you like to\nuse them to develop Syncthing integration or tooling with Qt and C++, it makes most sense to contribute it as an additional component\ndirectly to this repository. Then I will be able to take it into account when changing the API.\n\n### KDE integration\nSince the Dolphin integration and the Plasmoid are plugins, testing and debugging requires a few extra steps.\nSee [Testing and debugging Dolphin/KIO plugin with Qt Creator](/fileitemactionplugin/testing.md)\nand [Testing and debugging Plasmoid with Qt Creator](/plasmoid/testing.md).\n\n### Logging\nIt is possible to turn on logging of the underlying library by setting environment variables:\n\n* `LIB_SYNCTHING_CONNECTOR_LOG_ALL`: log everything mentioned in points below\n* `LIB_SYNCTHING_CONNECTOR_LOG_API_CALLS`: log calls to Syncthing's REST-API\n* `LIB_SYNCTHING_CONNECTOR_LOG_API_REPLIES`: log replies from Syncthing's REST-API (except events)\n* `LIB_SYNCTHING_CONNECTOR_LOG_EVENTS`: log events emitted by Syncthing's events REST-API endpoint\n* `LIB_SYNCTHING_CONNECTOR_LOG_DIRS_OR_DEVS_RESETTED`: log when folders/devices are internally reset\n* `LIB_SYNCTHING_CONNECTOR_LOG_NOTIFICATIONS`: log computed high-level notifications/events\n* `SYNCTHINGTRAY_LOG_JS_CONSOLE`: log message from the JavaScript console of the built-in web view\n\n### Useful environment variables for development\n* `QT_QPA_PLATFORM`: set to `offscreen` to disable graphical output, e.g. to run tests in headless\n  environment\n* `QT_QPA_PLATFORMTHEME`: the platform theme to use (e.g. `gtk3`) which influences file dialogs and\n  other parts of the UI where Qt can make use of native APIs\n* `QSG_RHI_BACKEND`: set the underlying graphics API used by the Qt Quick GUI, checkout the\n  [Qt documentation](https://doc.qt.io/qt-6/qtquick-visualcanvas-scenegraph-renderer.html#rendering-via-the-qt-rendering-hardware-interface)\n  for details\n* `QT_QUICK_CONTROLS_STYLE`: the style to use in the Qt Quick GUI, checkout the\n  [Qt documentation](https://doc.qt.io/qt-6/qtquickcontrols-styles.html) for available options\n* `QT_QUICK_CONTROLS_MATERIAL_THEME`/`QT_QUICK_CONTROLS_UNIVERSAL_THEME`: the theme to use in the Qt\n  Quick GUI, the variable and options depend on the style being used\n* `LIB_SYNCTHING_CONNECTOR_SYNCTHING_CONFIG_DIR`: override the path where Syncthing Tray's backend expects\n  Syncthing's `config.xml` file to be in\n* `SYNCTHINGTRAY_FAKE_FIRST_LAUNCH`: assume Syncthing Tray (or the Plasmoid) has been launched for the\n  first time\n* `SYNCTHINGTRAY_ENABLE_WIP_FEATURES`: enable work-in-progress/experimental features\n* `SYNCTHINGTRAY_QML_MAIN_PATH`: specifies the Qt Quick GUI entry point to use externally provided QML\n  code, e.g. set to something like `G:\\projects\\main\\syncthingtray\\tray\\gui\\qml\\Main.qml`; useful to\n  hot-reload the Qt Quick GUI with QML code changes with F5 without recompiling and relaunching the\n  application\n* `SYNCTHING_PATH`: override the path of Syncthing's executable when running tests\n* `SYNCTHING_PORT`: override the port of the Syncthing test instance spawned when running tests\n* `SYNCTHINGTRAY_SYSTEMD_USER_UNIT`: override the name of the systemd user-unit checked by the wizard's\n  setup detection\n* `SYNCTHINGTRAY_CHROMIUM_BASED_BROWSER`: override the path of the Chromium-based browser to open\n  Syncthing in app mode\n* `LIB_SYNCTHING_CONNECTOR_USE_DEPRECATED_ROUTES`: change whether to use deprecated routes (enabled by\n  default for compatibility with older Syncthing versions, set to `0` to change the behavior)\n\n## Known bugs and workarounds\nThe following bugs are caused by dependencies or limitations of certain\nplatforms. For bugs of Syncthing Tray itself, checkout the issues on GitHub.\n\n### Workaround positioning issues under Wayland\nThe Qt Widgets based version basically works under Wayland but there are\npositioning issues and the settings regarding positioning have no effect (see\n\"[List of bugs](#List-of-bugs)\" section below). One can workaround this limitation by telling the\nwindow manager how to place the window, e.g. under Sway one could add a\nconfiguration like this:\n\n```\nfor_window [title=\"^Syncthing Tray( \\(.*\\))?$\"] floating enable, border none, resize set 450 400, move position 916 0\n```\n\nAlternatively, one can also configure Syncthing Tray to use a normal window in\nthe appearance settings. That doesn't fix the positioning issue but then it\nlooks just like a normal application so not being positioned in the tray area is\nless problematic.\n\nYou can also select the window type \"None\". This disables Syncthing Tray's own UI\ncompletely and instead opens Syncthing directly when the tray icon is clicked.\n\n### Tweak GUI settings for dark mode under Windows\nThe dark mode introduced in Windows 10 does not affect traditional desktop\napplications like Syncthing Tray. As of version 6.7 the underlying toolkit Qt\nnevertheless provides a style specifically for Windows 11 that supports dark mode.\nSo as of Qt 6.7 the dark mode should work out of the box on Windows 11. Otherwise\nyou can select the widgets style \"Fusion\" under \"Qt/Appearance\". Then Syncthing\nTray will no longer use native styling of traditional desktop apps and follow the\ndark mode setting (as\n[Qt 6.5 added dark mode support](https://www.qt.io/blog/dark-mode-on-windows-11-with-qt-6.5)).\n\nIt is also recommended to apply some further tweaks:\n\n* Ensure an icon theme that looks good on dark backgrounds is selected. The Windows\n  builds provided on GitHub bundle a version of Breeze for light and dark themes. By\n  default the version matching the current color palette is selected automatically.\n  If you had an icon theme configured explicitly, you may need to manually select a\n  different icon theme in the settings under \"Qt/Appearance\" when enabling dark mode.\n* To make Syncthing icons fit better with the dark color palette, configure their\n  colors in Syncthing Tray's settings under \"Tray/UI icons\" and \"Tray/System\n  icons\". The \"Use preset\" button allows to select pre-defined colors suitable for\n  a dark color palette.\n\nWhen using an older Qt version than 6.5 you will also have to resort to more manual\ntweaking:\n\n* To enable dark colors for Syncthing Tray's UI elements, configure a dark color\n  palette in Syncthing Tray's settings under \"Qt/Appearance\". You can download and\n  load [dark-palette.ini](https://raw.githubusercontent.com/Martchus/syncthingtray/master/tray/resources/dark-palette.ini)\n  as a base and tweak the colors to your liking.\n* As of Qt 6.4, dark window borders will be enabled automatically if Windows'\n  dark mode setting is enabled and a dark color palette has been selected as\n  mentioned in the previous step.\n  To enable dark window borders in earlier Qt versions, set the environment\n  variable `QT_QPA_PLATFORM` to `windows:darkmode=1` or create a file called\n  `qt.conf` next to `syncthingtray.exe` with the contents:\n  ```\n  [Platforms]\n  WindowsArguments = darkmode=1\n  ```\n\nWhen using Syncthing Tray 1.3.x or older, you need to restart Syncthing Tray for\nthese changes to have any effect. It is not sufficient to close the last window;\nthe process needs to be restarted.\n\nNote that one can alternatively also enable Windows' \"High contrast\" setting which\nseems to bring back the traditional theming/coloring (which has normally been\n[removed](https://superuser.com/questions/949920/window-color-and-appearance-removed-in-win10)).\nUnfortunately it doesn't look very nice overall. Checkout\nhttps://github.com/tomasz1986/classic2000 to see how Windows looks like with high\ncontrast applied, or if you're in need for themes that look at least nicer than\nwhat's shipped with Windows.\n\n### DPI awareness under Windows\nSyncthing Tray supports\n[PMv2](https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows#per-monitor-and-per-monitor-v2-dpi-awareness)\nout of the box as of Qt 6. You may tweak settings according to the\n[Qt documentation](https://doc.qt.io/qt-6/highdpi.html#configuring-windows).\n\n### Workaround broken High-DPI scaling of Plasmoid under X11\nThis problem [has been resolved](https://bugs.kde.org/show_bug.cgi?id=356446#c88) so\nmake sure you are using an up-to-date Plasma version. Otherwise, setting the environment\nvariable `PLASMA_USE_QT_SCALING=1` might help.\n\n### List of bugs\n* Wayland limitations\n    * The tray menu can not be positioned correctly under Wayland because the protocol does not allow setting window positions from\n      the client-side (at least I don't know a way to do it). This issue can not be fixed unless Wayland provides an API to set the\n      window position to specific coordinates or a system tray icon.\n      See discussion on [freedesktop.org](https://lists.freedesktop.org/archives/wayland-devel/2014-August/017584.html).\n      Note that the Plasmoid is not affected by this limitation.\n    * While the tray menu is shown its entry is shown in the taskbar. Not sure whether there is a way to avoid this.\n* Qt limitations and bugs\n    * Qt \u003c 6.7:\n        * The native style does not look good under Windows 11. Therefore the style \"Fusion\" is used instead by default.\n    * Qt \u003c 6.5:\n        * The dark mode introduced in Windows 10 is not supported, see https://bugreports.qt.io/browse/QTBUG-72028.\n    * Qt \u003c 5.14\n        * Any self-signed certificate is accepted when using Qt WebEngine due to https://bugreports.qt.io/browse/QTBUG-51176.\n    * Qt \u003c 5.9:\n        * Pausing/resuming folders and devices doesn't work when using scan-intervals with a lot of zeros because of\n          Syncthing bug https://github.com/syncthing/syncthing/issues/4001. This has already been fixed on the Qt-side with\n          https://codereview.qt-project.org/#/c/187069/. However, the fix is only available in Qt 5.9 and above.\n        * Redirections cannot be followed (e.g. from HTTP to HTTPS) because\n          `QNetworkRequest::RedirectPolicyAttribute` and `QNetworkRequest::NoLessSafeRedirectPolicy` are not available yet.\n    * any Qt version:\n        * The tray disconnects from the local instance when the network connection goes down. The network connection must be restored\n          or the tray restarted to be able to connect to local Syncthing again. This is caused by Qt bug\n          https://bugreports.qt.io/browse/QTBUG-60949.\n* KDE limitations\n    * High-DPI scaling of Plasmoid is broken under X11 (https://bugs.kde.org/show_bug.cgi?id=356446).\n    * Plasma \u003c 5.26.0:\n        * The Plasmoid contents are possibly clipped when shown within the system notifications plasmoid.\n* Systemd integration\n    * This feature relies especially on the system being correctly configured. Checkout the\n      \"[Required system configuration](#required-system-configuration)\" section for details.\n\n## Legal information\n### Copyright notice and license\nCopyright © 2016-2025 Marius Kittler\n\nAll code - unless stated otherwise in a comment on top of the file - is licensed under [GPL-2-or-later](LICENSE). This does *not* apply\nto code contained in Git repositories included as Git submodule (which contain their own README and licensing information).\n\n### Attribution for 3rd party content\nSyncthing Tray contains icons from various sources:\n\n* Some icons are taken from [Fork Awesome](https://forkaweso.me/Fork-Awesome) (see [their license](https://forkaweso.me/Fork-Awesome/license)).\n  These are provided via [qtforkawesome](https://github.com/Martchus/qtforkawesome).\n* The Syncthing icons are taken from the [Syncthing](https://github.com/syncthing/syncthing) project.\n* The icons on [the website](https://martchus.github.io/syncthingtray) are from\n  [Material Design Icons](https://materialdesignicons.com).\n* All other icons found in this repository are taken from the [KDE/Breeze](https://invent.kde.org/frameworks/breeze-icons) project.\n\nNone of these icons have been (intentionally) modified so no copyright for modifications is asserted.\n\nSome of the code is based on code from other open source projects:\n\n* Code in `tray/gui/quick/quickicon.cpp` and the corresponding header file originates from\n  [Kirigami](https://invent.kde.org/frameworks/kirigami). The comments at the beginning of those files state the original\n  authors/contributors.\n* Parts of `tray/android/src/io/github/martchus/syncthingtray/Util.java` are based on\n  [com.nutomic.syncthingandroid.util](https://github.com/Catfriend1/syncthing-android/blob/main/app/src/main/java/com/nutomic/syncthingandroid/util/FileUtils.java).\n* The icon files `ic_stat_notify*` under `tray/android/res` and `tray/resources` are taken from\n  [syncthing-android](https://github.com/Catfriend1/syncthing-android/tree/main/app/src/main/res).\n* Many of the descriptions used in the Qt Quick GUI are taken from [Syncthing](https://github.com/syncthing/syncthing)\n  and [its documentation](https://github.com/syncthing/docs).\n* The `uncamel` function used in the Qt Quick GUI is taken from [Syncthing](https://github.com/syncthing/syncthing).\n\nThe original code has been modified. Copyright as mentioned in the previous section applies to modifications.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartchus%2Fsyncthingtray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartchus%2Fsyncthingtray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartchus%2Fsyncthingtray/lists"}