Skip to content

Releases: SteamDeckHomebrew/decky-loader

Built-in Plugin Store, Bug Fixes

10 May 23:24
414e0da
Compare
Choose a tag to compare
  • You no longer need to use an external browser to view the Plugin Store. Just tap on the shop icon next to Plugins and it will open the store directly inside the Steam Browser.
  • Fixed a race-condition bug where two methods called very close to each other would receive the same ID.
  • Fixed a bug where hot reloading would fail for plugins with subdirectories

Working Binary, Fixed Process spawn & termination bug, Fixed callsign hot reload bug

29 Apr 19:11
Compare
Choose a tag to compare
  • Processes are now spawned via the multiprocessing API instead of the ProcessPoolExecutor one. I believe this is more robust and reliable.
  • Every plugin process spawned, now implements a signal handler for SIGINT that calls exit. This should probably fix these weird issues where the server would not quit unless killed.
  • Fixed a logic error in the callsign implementation regarding hot reload/debug.
  • The binary submitted, was built by me using local pyinstaller on my Steam Deck, and basic functionality was confirmed working. We ran into weird issues with the Github Action that we use for building, and are looking into a different solution. Until we figure that out, nightly builds will most likely be broken.

Function call and store installation fix

22 Apr 19:53
73559ae
Compare
Choose a tag to compare

Changelog

  • Fixed calling backend functions after steam has been restarted
  • Fixed installing plugins from the store (https;//plugins.deckbrew.xyz)
  • Fixed install scripts behaving weirdly and not installing / uninstalling everything correctly in some circumstances
  • Fixed injecting more than one css rule into Steam

New plugin format, Root plugins, Library improvements

18 Apr 13:29
fa776f0
Compare
Choose a tag to compare
  • Plugins now follow a new format

    • Plugin metadata like name, description, html files and flags, now reside in a separate plugin.json file.
    • This allows plugins that only use javascript (called passive plugins internally), to not include any python code at all
    • This new format also supports the new flags field, where plugins can modify the way the loader treats them. The only flags supported so far are root, which loads the plugin into a root process, and the debug flag which replaces the hot_reload setting.
    • You can find more information on this new plugin format in the Wiki.
  • Library improvements

    • Added functions to inject and remove css from tabs.
    • Added library function to execute code in a different tab.
    • You can now find the documentation for all the library methods in the Wiki.
  • Security improvements

    • Plugins are now assigned a callsign (a random string), which they use for all internal identification, like resource fetching and method calls. This is to ensure that plugins only access their own resources and methods.
    • Plugins are now owned by root and have read-only permissions. This is handled automatically.
    • Plugins now run in their own isolated processes, with their own event loop. This isolation allows us to implement useful functionality like root access, since these processes can also have different permissions.

Proper auto reload, better plugin structure

08 Apr 15:11
Compare
Choose a tag to compare

Changelog

  • The loader now automatically reinjects itself into Steam when Steam gets restarted
    • This means the loader now properly starts up again when switching back from Desktop Mode and also is more reliable when rebooting the Deck
  • Plugin Tiles are now isolated in their own iframes
  • Plugins now all live in their own folder
    • This allows separating python backend code from UI code, bundling extra dependencies and so on
  • The menu title now gets changed from Plugins to the name of the current Plugin when one gets loaded
  • Fixed first plugin button being smaller than the rest of them

Initial Release

04 Apr 16:49
4d2ab9d
Compare
Choose a tag to compare

Changelog

Compared to the original version:

  • The loader has been rewritten in Python
  • Plugins are now written in Python. Check out the Plugin Template if you want to make your own plugins!
  • Plugins can now call Python functions from JavaScript