* First iteration for internationalization of the loader * First iteration for internationalization of the loader * Cleanup node mess * Cleanup node mess pt2 * Additional touches * Latest decky changed merged into i18n and updated translation. * Styling fixes * Initial backend hosting implementation * Added correct url path of the loopback server. * Added correct url path of the loopback server. * Some better namespaced text. * Added whitelist for locales path. * Refactor languages and fix hooks logic bugs. * Small typo in language translation structure. * Working backend, automatically swtich languages with steam and language fixes. * Fix to languages * Key fixes * Additional language fixes. * Additional json changes * Final text revision and added a vscode tasks to automatically extract text from code. * Typo in the middleware * Remove unused imports * Cleanup whitespaces. * Import changes * Revert "Import changes" This reverts commit8e8231950f. * Update index.d.ts * Clean up unused imports * Delete pnpm-lock.yaml * Update rollup.config.js * Update PluginInstallModal.tsx * Update index.tsx * Update plugin-loader.tsx * Update plugin-loader.tsx * Revert "Delete pnpm-lock.yaml" This reverts commit3a39f36f21. * Additional strings reworks. * Fixes for issues coming from github merge. * Fixes for master * Styling fixes * Styling pt2 * Missed a few strings in master, * Styling fixes * Additional master merge fixes. * Final cleanup and adaptation to master. * Final empty language cleanup and few string added * Small changes to italian translation * Disabled translation on a few components inside plugin-loader for missing react hooks. * Fixed passing tag to translation. * Disable debug output for reducing console spam. * Return correct content type * Small italian language change * Added support for country code * Fixed missing translation for uninstall popup. * Fix class name shenanigans for toast notification * Update dependencies * Fixed github workflow to include the new locales folder * Update dependencies to latest version (unless it's React) and fixed the new small errors that cropped up * Missed a file name change * Updated dev dependencies to latest version * Missed a few dev dependencies * Revert "Update dependencies to latest version (unless it's React) and fixed the new small errors that cropped up" Messed up merge with a different main branch * Messed up deletion of rollup config. * Fix broken pnpm lock file * Missed a localized string during the merge * Fixed a parameter mistake in the uninstall text parameter * Fix pnpm random issues * Small italian language tweaks * Fix wrong parameter passed to the uninstall function call * Another fix on a wrong function parameter * Additional translation text on the store and branch selection channels * Changed the default type passed to map to being able to index the two arrays. * Reverted and reworked the last changes * Distinguish events in UI for installing vs reinstalling plugins * Additional fixes for reinstall prompt * Revert the use of intevalPlural since the parser doesn't seem to support that. * Missed a routing path in the backend * Small bugfixes * Small fixes * Correctly adding the parameter to the request headers. * Refactoring of the UI popup modal * Fix pnpm shenanigans * Final fixes for the install UI localization * Clean up unnedeed backend code * Small rework on text selection. * Cleaned up parser configuration * Removed extracttext dependency to pnpmsetup * Merged translation and cleaned up parser * Fixed JSON structure after manual merge. * Added translation to the file picker * Revert changes to PluginInstallModal * Reworked the text modal for the final time * Missed the proper linted text * Missed the backend change * Final branch cleanup * Fixed small translation bleeding Caused from the manual merge of _old.json files. * fix extra space in browser.py * fix extra newline in plugin-loader.tsx * Cleanup i18next-parser.config.mjs * Update plugin-loader.tsx * Cleanup language files * Better labeling of text * Fixed language typos in BranchSelect * Fixed language typos in StoreSelect * Cleanup plugin-loader.tsx from unused imports * Removed the path bypass since I'm using authentication from the frontend. * Reimplemented this component as a functional component. * Updated dependencies and lockfile * Removed static route from main.py Already handled in loader.py * Small italian coherency fixes * Fix small typography fixes on plugin name uninstall * Fixed italian typo on removal popup * Reenabled manual escaping value in i18next * Set to fallback to the default language if the string in the JSON file is empty. * Fixed pnpm wankery * Added a missed italian text translation string --------- Co-authored-by: AAGaming <aa@mail.catvibers.me>
Decky Loader
📖 About
Decky Loader is a homebrew plugin launcher for the Steam Deck. It can be used to stylize your menus, change system sounds, adjust your screen saturation, change additional system settings, and more.
For more information about Decky Loader as well as documentation and development tools, please visit our wiki.
🎨 Features
🧹 Clean injecting and loading of multiple plugins.
🔒 Stays installed between system updates and reboots.
🔗 Allows two-way communication between plugins and the loader.
🐍 Supports Python functions run from TypeScript React.
🌐 Allows plugins to make fetch calls that bypass CORS completely.
🤔 Common Issues
- Syncthing may use port 8080 on Steam Deck, which Decky Loader needs to function. If you are using Syncthing as a service, please change its port to something else.
- If you are using any software that uses port 1337 or 8080, please change its port to something else or uninstall it.
- Sometimes Decky will disappear on SteamOS updates. This can easily be fixed by just re-running the installer and installing the stable branch again. If this doesn't work, try installing the prerelease instead. If that doesn't work, then check the existing issues and if there isn't one then you can file a new issue.
💾 Installation
- This installation can be done without an admin/sudo password set.
- Prepare a mouse and keyboard if possible.
- Keyboards and mice can be connected to the Steam Deck via USB-C or Bluetooth.
- Many Bluetooth keyboard and mouse apps are available for iOS and Android. (KDE connect is preinstalled on the steam deck)
- The Steam Link app is available on Windows, macOS, and Linux. It works well as a remote desktop substitute.
- If you have no other options, use the right trackpad as a mouse and press
+
to open the on-screen keyboard as needed.
- Press the
button and open the Power menu.
- Select "Switch to Desktop".
- Navigate to this Github page on a browser of your choice.
- Download the installer file.
- Drag the file onto your desktop and double click it to run it.
- Either type your admin password or allow Decky to temporarily set your admin password to
Decky!(this password will be removed after the installer finishes) - Choose the version of Decky Loader you want to install.
- Latest Release
Intended for most users. This is the latest stable version of Decky Loader. - Latest Pre-Release
Intended for plugin developers. Pre-releases are unlikely to be fully stable but contain the latest changes. For more information on plugin development, please consult the wiki page.
- Latest Release
- Open the Return to Gaming Mode shortcut on your desktop.
- There is also a fast install for those who can use Konsole. Run
curl -L https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/install_release.sh | shand type your password when prompted.
👋 Uninstallation
We are sorry to see you go! If you are considering uninstalling because you are having issues, please consider opening an issue or joining our Discord so we can help you and other users.
- Press the
button and open the Power menu.
- Select "Switch to Desktop".
- Run the installer file again, and select
uninstall decky loader.
- There is also a fast uninstall for those who can use Konsole. Run
curl -L https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/uninstall.sh | shand type your password when prompted.
🚀 Getting Started
Now that you have Decky Loader installed, you can start using plugins. Each plugin is maintained by a different developer and has its own uses, but most follow a general structure outlined below.
📦 Plugins
- Press the
button and navigate to the
icon. This is the Decky menu used for interacting with plugins and the loader itself.
- Select the
icon to open the Plugins Browser. This is where you can find and install plugins.
- You can also install from URL in the Settings menu. We do not recommend installing plugins from untrusted sources.
- To install a plugin, select the "Install" button on the plugin you want. You can also select a version from a dropdown menu, but this is not recommended.
- To update, uninstall, and reload plugins, navigate to the Decky menu and select the
icon.
- Keep in mind that uninstalling a plugin will only remove its plugin files, not any other files it may have created.
🛠️ Plugin Development
There is no complete plugin development documentation yet. However a good starting point is the plugin template repository. Consider joining our Discord if you have any questions.
🤝 Contributing
Please consult the wiki page regarding development for more information on installing development versions of Decky Loader. You can also install the Steam Deck UI on a Windows or Linux computer for testing by following this YouTube guide.
- Clone the repository using the latest commit to main before starting your PR.
- In your clone of the repository, run these commands.
cd frontend pnpm i pnpm run build - If you are modifying the UI, these commands will need to be run before deploying the changes to your Steam Deck.
- Use the VS Code tasks or
deck.shscript to deploy your changes to your Steam Deck to test them. - You will be testing your changes with the Python script version. You will need to build, deploy, and reload each time.
⚠️ If you are recieving build errors due to an out of date library, you should run this command inside of your repository.
pnpm update decky-frontend-lib --latest
Source control and deploying plugins are left to each respective contributor for the cloned repos in order to keep dependencies up to date.
📜 Credits
The original idea for the plugin loader concept is based on the work of marios8543's Steam Deck UI Inject project.
