You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a tracking issue for the upcoming v6 release that we have been working hard on. Subscribe to this issue to be notified of the v6 development, as we are closing issues as they get fixed for the v6 branch (now the main branch).
What has been done
Lots of refactoring, and rewrites to internal parts of Ulauncher that caused bugs, inconsistencies, performance issues, or were holding us back from fixing issues, adding features or just made it very hard to work with Ulauncher in general. We got rid of a total of 7 dependencies (in the Debian package). It's faster and lighter on your system resource usage, because of taking better advantage of the fast and capable GTK APIs, Unix sockets, and many smaller performance improvements. It's also significantly easier to build and contribute to Ulauncher now as well. These changes are too many and too complex to detail here. git diff --shortstat as of writing this says 545 files changed, 11479 insertions(+), 29372 deletions(-)
Many Extension API improvements to make it easier to write extensions with less code (more on this TBA).
Lots of other smaller improvements and bug fixes.
Removed a couple of features that were causing more issues than they solved, and changed the behavior of some others to be more intuitive, performant, compatible or to work enable planned future changes.
To test Ulauncher v6, follow the instructions to set up and run.
To see what else is planned, see the: milestone (note that the milestone is subject to change, incomplete and doesn't include smaller things like updating our documentation, website and extension website).
Ulauncher application changes
BREAKING: Dropped support for Python versions older than 3.8.
BREAKING: Dropped support for GTK+ versions older than 3.22.
BREAKING: Replaced the previous hotkey binding library (X11 only) with custom desktop environment wrappers for Gnome, Elementary and Budige, XFCE and KDE/Plasma, and instructions in the preferences window for other desktops. feat: replace keybinder with DE-wrappers #1256fa16d934570ba4
The --hide-window CLI option is now renamed to --daemon. --hide-window is now an invalid option that will cause Ulauncher not to start. This is so that old XDG autostart files won't be conflicting with the new implementation (6f39063).
BREAKING: Removed "Blacklisted Apps Dirs" feature. This was previously needed mostly for performance reasons because we were monitoring desktop application entries (we we no longer need to do that as of Remove "Blacklisted App Dirs" option #834). Let us know though if you find after having tested Ulauncher v6, that you still need this setting.
Ulauncher now uses the GTK APIs to fetch the desktop apps, instead of handling this ourselves on a low level. This allowed us to simplify our logic and remove 1.5+K lines of code, one dependency, one runtime process, and many sources of bugs (Rewrite apps logic using Gio.DesktopAppInfo.get_all() #835).
Ulauncher now uses Unix sockets instead of Websockets to communicate with extensions (Unix Socket Implementation #822). This rewrite is a major improvement for performance and security, and it's fully backward compatible.
Configuration files have been moved. We now adopted the new [XDG_STATE_HOME(https://www.reddit.com/r/linux/comments/ny34vs/new_xdg_state_home_in_xdg_base_directory_spec/) spec (Remove pyxdg dependency and switch to store state files in XDG_STATE_HOME #846). Note that Ulauncher v6 will migrate your old configuration files the first time you launch it, so this is not a breaking change.
Script shortcuts now support %s to access the argument, which means if you use %s in your shell scripts code and don't want this you have to change to something else (like using f-strings in python) (Argument to shell commands get %s instead of the real argument #389)
Ulauncher's Preferences behaves like a standard GTK window that has a header bar that you can drag it with, resize, maximize etc (Refactor preferences window #998). It is still a web view inside though.
Ulauncher can now take an optional argument to set the Ulauncher query gapplication action io.ulauncher.Ulauncher set-query "'hello'"
For Gnome Desktop users, the settings (ex "Sound" are now included by default as apps, providing the same functionality as the extension ulauncher-gnome-settings does, but without needing an extension (3601dfd).
Since we removed the support for ancient GTK 3.18 you can specify only css_file_gtk to target GTK 3.20+, rather than needing both css_file_gtk and css_file_gtk_3.20+ (old themes specifying both ways will remain to work the same way) (Simplify CSS themes by removing GTK 3.20 support #836).
Extension changes
Most extensions that runs in Ulauncher v5 now should run in Ulauncher v6 as well. Almost all changes we made are backwards compatible. The exceptions are if the extension used APIs that were not meant for extensions to use.
BREAKING: Simplified the Ulauncher API version by dropping the patch version. While this was made to be compatible with the previously documented ways to specify the version, the new implementation doesn't support all variants of the semver contraints that the old one did (this is very unlikely to affect extensions) (Remove semver.py and implement a much simpler version checker #859).
BREAKING: The old extension debugging instructions are no longer supported (we made it easy to install from a local git repository instead, see below).
BREAKING: Removed Result getter methods get_name(), get_keyword(), get_icon(). Just use the properties name, keyword, icon directly if you need to access properties from the result (38e8792).
BREAKING: The new reworked Result class now no longer support positional parameters (note that this feature was never documented to begin with, and I have found no extensions that used this).
BREAKING: Moved many APIs extensions shouldn't have had access to like (api.server.*and api.shared.action.LaunchAppAction)
Extension preferences are now loaded and available directly when the extension object is created (as a dict self.preferences). Previously they were loaded into the same property and format, but after the extension was initialized via the PreferencesEvent. The PreferencesEvent still exists for backward compatibility, but we recommend to simply use the class __init__ now (see Load extension preferences directly in __init__ #1047)
We changed the terminology and APIs for "Triggers". These were previously defined as "preferences" with type "keyword" in the manifest. But this was both confusing and a limiting factor for them. Implement triggers #1097
The new method on_input that replaces KeywordQueryEvent does not inherit the API suggestion: add event.get_keyword_id() #284 issue, and does not use any custom Ulauncher data type for the argument. Just "input text" and "keyword id" (both strings). For old extensions in Ulauncher v6 this issue has been solved in a different way: Rework extension keyword #1056
Our extension installer has been internally rewritten:
Uses git repository discover references instead of the rate-limited GitHub API.
Supports installing from GitHub, GitLab, and Codea-compatible remote repos (like Codeberg)
Fixed extension preferences type text type to show as a textarea (f8bc100)
Added extension preferences type checkbox and number (d675036, 39811bb)
The extension manifest has gone through many spec changes. The old format(s) are still supported, but we reformat it internally:
required_api_version is now api_version (again)
developer_name is now authors
We no longer ask for a manifest "description", as that wasn't really used Remove unused property "description" from manifest #1083 (preferences and triggers still uses descriptions, but the manifest root doesn't have this field)
query_debounce is now specified directly in the manifest root as input_debounce because we no longer use the terminology "query" for the extension input triggers
"Extension actions" have been simplified so you can now use simple data types instead:
DoNothingAction --> True
HideWindowAction() --> False
SetUserQueryAction("string") --> "string"
All other actions are represented as JSON objects.
This is a tracking issue for the upcoming v6 release that we have been working hard on. Subscribe to this issue to be notified of the v6 development, as we are closing issues as they get fixed for the v6 branch (now the main branch).
What has been done
git diff --shortstatas of writing this says545 files changed, 11479 insertions(+), 29372 deletions(-)To test Ulauncher v6, follow the instructions to set up and run.
To see what else is planned, see the: milestone (note that the milestone is subject to change, incomplete and doesn't include smaller things like updating our documentation, website and extension website).
Ulauncher application changes
--hide-windowCLI option is now renamed to--daemon.--hide-windowis now an invalid option that will cause Ulauncher not to start. This is so that old XDG autostart files won't be conflicting with the new implementation (6f39063).ulauncher-toggleis just a wrapper aroundgapplication launch io.ulauncher.Ulauncher(Switch to Gtk.Application and makeulaunchercommand "toggle" by default #988, feat: dbus activatable #1164, d90b89f and many more)ulauncher-togglecommand to always activate the window, rather then actually toggling it.%sto access the argument, which means if you use%sin your shell scripts code and don't want this you have to change to something else (like using f-strings in python) (Argument to shell commands get %s instead of the real argument #389)Ulaunchercan now take an optional argument to set the Ulauncher querygapplication action io.ulauncher.Ulauncher set-query "'hello'"Theme changes
css_file_gtkto target GTK 3.20+, rather than needing bothcss_file_gtkandcss_file_gtk_3.20+(old themes specifying both ways will remain to work the same way) (Simplify CSS themes by removing GTK 3.20 support #836).Extension changes
Most extensions that runs in Ulauncher v5 now should run in Ulauncher v6 as well. Almost all changes we made are backwards compatible. The exceptions are if the extension used APIs that were not meant for extensions to use.
apiv3orapiv3.1etc Completely remove versions.json support #1091Resultgetter methodsget_name(),get_keyword(),get_icon(). Just use the propertiesname,keyword,icondirectly if you need to access properties from the result (38e8792).Resultclass now no longer support positional parameters (note that this feature was never documented to begin with, and I have found no extensions that used this).api.server.*andapi.shared.action.LaunchAppAction)self.preferences). Previously they were loaded into the same property and format, but after the extension was initialized via thePreferencesEvent. The PreferencesEvent still exists for backward compatibility, but we recommend to simply use the class__init__now (see Load extension preferences directly in __init__ #1047)type"keyword" in the manifest. But this was both confusing and a limiting factor for them. Implement triggers #1097on_inputthat replacesKeywordQueryEventdoes not inherit the API suggestion: add event.get_keyword_id() #284 issue, and does not use any custom Ulauncher data type for the argument. Just "input text" and "keyword id" (both strings). For old extensions in Ulauncher v6 this issue has been solved in a different way: Rework extension keyword #1056ExtensionResultItemandExtensionSmallResultItemto justResult(set the a propertycompacttoTrueto use the smaller template. Merge Result classes (Result, SearchableResult, SmallResult, ExtensionResult, ExtensionSmallResult) #1118 Merge Result classes (and glade ui files) #1120ulauncher.api(Rename *ResultItem to just *Result #934, 741ebae)texttype to show as a textarea (f8bc100)checkboxandnumber(d675036, 39811bb)required_api_versionis nowapi_version(again)developer_nameis nowauthorspreferencesis now a dictionary Change manifest.preferences to a dictionary #1085 and optional as triggers (aka "type": "keyword") has been moved out to their own separate placetriggersImplement triggers #1097query_debounceis now specified directly in the manifest root asinput_debouncebecause we no longer use the terminology "query" for the extension input triggersDoNothingAction-->TrueHideWindowAction()-->FalseSetUserQueryAction("string")-->"string"