Universal Device Toolkit (UDT, formerly Lenovo Legion Toolkit) is a lightweight Windows device utility that keeps Lenovo hardware control direct on supported machines and still remains useful on other PCs through basic mode. It runs without background services, uses very little memory and CPU, contains no telemetry, and is built around plugin extensions for device-specific workflows.
Plugin extensions are a first-class part of this project. You can install, update, configure, open, and remove plugins from the Plugin Extensions page to add CPU, GPU, network, shell, mouse, and other specialized tools without bloating the base application.
UDT is an actively maintained GPL-3.0 project focused on compatibility updates, security hardening, CI/release automation, newer device detection, plugin extensibility, and ongoing Windows support. Existing Lenovo Legion Toolkit users can upgrade directly; settings, plugins, and package-manager identifiers are kept compatible during the rename. The full desktop hardware-control app remains Windows-first; macOS and Linux support starts with the UniversalDeviceToolkit.CrossPlatform diagnostics CLI and safe basic-mode discovery.
- Disclaimer
- Download
- Quick Start
- Compatibility
- Features
- Donate
- Credits
- FAQ
- Arguments
- How to collect logs?
- Localization
- Documentation
- Contribution
The tool comes with no warranty. Use at your own risk.
Please be patient and read through this readme carefully - it contains important information.
Tip
If you are looking for a Vantage alternative for Linux, check LenovoLegionLinux project out.
Use the current SSC-STUDIO/UniversalDeviceToolkit releases for maintained builds. Some package identifiers temporarily retain the LenovoLegionToolkit name for upgrade continuity.
- GitHub Releases: Download the latest Full or Online installer from Releases. Full includes bundled languages and device data; Online is smaller and installs language/device resources from the app. v4.1.0 is the first stable Universal Device Toolkit release with legacy Lenovo Legion Toolkit upgrade compatibility.
- winget: Install or update with
winget install SSC-STUDIO.LenovoLegionToolkit. The wingetPackageIdentifierintentionally remainsSSC-STUDIO.LenovoLegionToolkitfor now so old Lenovo Legion Toolkit installations can upgrade in place. - Scoop:
scoop bucket add ssc-studio https://github.com/SSC-STUDIO/scoop-bucket && scoop install ssc-studio/lenovolegiontoolkit. The Scoop manifest name also remainslenovolegiontoolkitfor now. - Checksum: Each GitHub release includes a
SHA256.txtfile. Verify downloaded installers before sharing mirrors.
Some local paths, CLI names, and automation environment variables still use LenovoLegionToolkit, llt.exe, or LLT_* for compatibility during the rename.
Repository project folders use UniversalDeviceToolkit.*; core and plugin assemblies/namespaces remain LenovoLegionToolkit.* for plugin ABI compatibility.
UDT works best when it's running in the background, so go to Settings and enable Autorun and Minimize on close. Next thing is to either disable Vantage and Hotkeys or just uninstall them. After that UDT will always run on startup and will take over all functions that were handled by Vantage and Hotkeys.
Warning
If you close UDT completely some functions will not work, like synchronizing Windows Power Modes or Windows Power Plans with current Power Mode, Macros or Actions. This is due to the fact that UDT does not run any background services and won't be able to respond to changes.
- Install UDT - Download from Releases or upgrade directly from an existing Lenovo Legion Toolkit installation
- Configure Settings - Enable "Autorun" and "Minimize on close" in Settings
- Disable Conflicts - Uninstall or disable Lenovo Vantage and Hotkeys
- Explore Features - Supported Lenovo hardware controls, plugin extensions, system optimization, language packs, themes, and logs
Tip
First time? Check out the User Guide for detailed walkthroughs.
If you installed UDT on a clean Windows install and want Lenovo hardware controls, make sure to have necessary Lenovo drivers installed. If drivers are missing, hardware-specific options might not be available. Especially make sure that these two are installed on supported Lenovo systems:
- Lenovo Energy Management
- Lenovo Vantage Gaming Feature Driver
If for whatever reason the UDT installer did not setup .NET properly:
- Go to https://dotnet.microsoft.com/en-us/download/dotnet/10.0
- Find section ".NET Desktop Runtime"
- Download x64 Windows installer
- Run the installer
Note
If you installed UDT from Scoop, the required .NET runtime should have been installed automatically as a dependency. If anything fails, use scoop update to update all packages and try to reinstall UDT with --force argument.
After following these steps, you can open Terminal and type: dotnet --info. In the output look for section .NET runtimes installed, in this section you should see entries for the installed runtime such as Microsoft.NETCore.App 10.x.x and Microsoft.WindowsDesktop.App 10.x.x under C:\Program Files\dotnet\shared.
Universal Device Toolkit now uses catalog-backed device support. Supported Lenovo gaming and creator machines get hardware controls; unsupported Lenovo models and non-Lenovo PCs enter basic mode so unavailable hardware entries stay hidden while plugins, system optimization, language, theme, update, log, and safety workflows remain available.
Hardware-control families:
- Legion 5, Legion Slim 5, Legion Pro 5
- Legion 7, Legion Pro 7, Legion 9
- Legion Go
- LOQ
- IdeaPad Gaming, ThinkBook, YOGA, and selected legacy Lenovo gaming families
- Chinese variants such as R7000/R7000P/R9000/Y7000/Y7000P/Y9000, including Y7000P 2020H
Basic-mode families:
- Lenovo ThinkPad, ThinkCentre, ThinkStation, IdeaCentre, Legion desktop, XiaoXin, V series, Slim, and other unmatched Lenovo models
- Motorola, ASUS, Dell, HP, Acer, MSI, Microsoft Surface, GIGABYTE/AORUS, Razer, Samsung Galaxy Book, Apple Mac, HUAWEI MateBook, Xiaomi/RedmiBook, realme Book, Infinix INBook, HONOR MagicBook, LG gram, Framework, Panasonic TOUGHBOOK, Dynabook/Toshiba, Fujitsu, VAIO, Gateway, CHUWI, TECLAST, Jumper, MEDION/ERAZER, XMG/SCHENKER, Hasee, THUNDEROBOT, MACHENIKE, COLORFUL, MAIBENBEN, MECHREVO, Clevo/Tongfang barebones, handheld PCs such as Steam Deck/GPD/AYANEO/ONEXPLAYER, mini PCs such as MINISFORUM/Beelink/GEEKOM/ZOTAC, and generic PCs
Hardware-control matching is driven by UniversalDeviceToolkit.Lib/DeviceSupport/LenovoDeviceSupportProvider.cs and online data-only device packs. Generations 6 (MY2021), 7 (MY2022), 8 (MY2023), 9 (MY2024) and newer are the primary Lenovo hardware-control target. Some features may also work on selected 5th generation (MY2020) devices. Basic-mode vendor matching normalizes common BIOS/DMI formatting differences, so punctuation, casing, spacing, diacritics, and company suffix variants do not usually block a match.
If UDT starts in basic mode, it is doing that intentionally to avoid showing unsupported hardware controls. You can still use plugins and general system tools, and you can contribute logs or device-pack data for broader support.
The Windows desktop app uses WPF, Win32, WMI, registry, and vendor-specific Windows drivers, so those hardware-control surfaces are not portable as-is. The repository now includes UniversalDeviceToolkit.CrossPlatform, a plain net10.0 CLI entry point intended for macOS/Linux and Windows diagnostics:
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- status
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- json
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- hardware
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- telemetry
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- power
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- profile
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- plugins
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- controls
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- verify cpu-governor performance
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- elevate set cpu-governor performance
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- support
dotnet run --project UniversalDeviceToolkit.CrossPlatform -- doctorOn macOS/Linux this CLI reports platform/runtime information, reads basic hardware identity from Linux DMI (/sys/class/dmi/id) or macOS sysctl/system_profiler, reads safe CPU/memory/frequency/temperature/fan telemetry from Linux procfs/sysfs or macOS sysctl, reads battery and external power state from Linux power_supply or macOS pmset, inspects platform power profiles through Linux powerprofilesctl or macOS pmset, scans plugin manifests without loading WPF/Windows assemblies, matches common vendors to safe basic device packs, and treats the machine as safe basic mode. dotnet run --project UniversalDeviceToolkit.CrossPlatform -- controls lists the current cross-platform control surface, including writable standard OS controls and hidden vendor-specific controls. dotnet run --project UniversalDeviceToolkit.CrossPlatform -- set power-profile balanced can set a supported platform profile where the OS exposes one (power-saver/balanced/performance on Linux, automatic/low-power on macOS). On Linux, dotnet run --project UniversalDeviceToolkit.CrossPlatform -- set cpu-governor performance can set all readable cpufreq policies to a supported governor, dotnet run --project UniversalDeviceToolkit.CrossPlatform -- set battery-charge-limit 80 can set the first readable battery charge end threshold to 80 percent, and dotnet run --project UniversalDeviceToolkit.CrossPlatform -- set display-brightness 60 can set the first readable /sys/class/backlight device to 60 percent when permissions allow it. dotnet run --project UniversalDeviceToolkit.CrossPlatform -- verify cpu-governor performance applies the requested writable control, samples CPU frequency during short CPU-load windows before and after the change, and prints the measured average/min/max delta so hardware effect checks are evidence-backed instead of simulated. On Windows, dotnet run --project UniversalDeviceToolkit.CrossPlatform -- elevate set cpu-governor performance restarts the requested CLI command through a UAC prompt; on Linux/macOS, use sudo or the platform polkit helper for OS-protected hardware writes. dotnet run --project UniversalDeviceToolkit.CrossPlatform -- plugins /path/to/plugins inspects a specific plugin root and reports runtime/optimization contributions that are candidates for future cross-platform loading. The doctor command aggregates those checks into a pass/warn/fail readiness report. The Cross-Platform CLI workflow builds, tests, and smoke-runs this entry point on Windows, Ubuntu, and macOS runners. Vendor-specific control backends and cross-platform plugin loading are future expansion points behind this non-Windows entry point.
Overall the recommendation is to disable or uninstall Vantage, Hotkeys and Legion Zone while using UDT. There are some functions that cause conflicts or may not work properly when UDT is working along side other Lenovo apps.
Tip
Using the disable option in UDT is often the easiest option.
UDT currently does not support installation for multiple users, so if you need to have multiple users on you laptop you might encounter issues. Same goes for accounts without Administrator rights - UDT needs an account with Administrator rights. If you install UDT on an account without such rights, UDT will not work properly.
The app allows to:
- Change settings like power mode, battery charging mode, etc. that are available only through Vantage.
- Spectrum RGB, 4-zone RGB and White backlight keyboards support.
- Monitor dGPU activity (NVIDIA only).
- Define Actions that will run when the laptop is i.e. connected to AC power.
- View battery statistics.
- Control laptop features from command line
- Check for driver and software updates.
- Check warranty status.
- Disable/enable Lenovo Vantage, Legion Zone and Lenovo Hotkeys service without uninstalling them.
- ... and more!
The Plugin Extensions page is the primary way to grow UDT beyond the built-in runtime. It lets you browse available plugins, install or update them directly from the online repository, open plugin pages, configure supported plugins, and remove them cleanly when they are no longer needed.
Plugins are used to deliver tools and workflows that used to live in separate sections. This keeps the main app focused while still allowing CPU, GPU, networking, shell integration, mouse customization, and other add-ons to evolve independently.
Custom Mode is available on all devices that support it. You can find it in the Power Mode dropdown as it basically is 4th power mode and it allows for adjusting power limits and fans. Custom Mode can't be accessed with Fn+Q shortcut. Not all features of Custom Mode are supported by all devices.
If you have one of the following BIOSes:
- G9CN (24 or higher)
- GKCN (46 or higher)
- H1CN (39 or higher)
- HACN (31 or higher)
- HHCN (20 or higher)
Make sure to update it to at least minimum version mentioned above for Custom Mode to function properly.
Both Spectrum per-key RGB and 4-zone RGB backlight is supported. Vantage and it's services need to be disabled to avoid conflicts when communicating with hardware. If you use other RGB apps that might conflict with UDT, check FAQ for solutions.
Other lighting features like both 1 and 3 level white keyboard backlight, panel logo and rear ports backlight are also supported, however there are some constraints:
- GKCN54WW and lower - some lighting features are disabled due to a bug in these BIOS versions causing BSOD
- some (mostly Gen 6) laptops models might not show all options or show options that aren't there - this is due misconfigured BIOS that doesn't report availability of these features
Lighting that required Corsair iCue is not supported by UDT.
Important
Riot Vanguard DRM (used in Valorant for example) is known to cause issues with RGB controls. If you don't see RGB settings and have it installed, make sure it doesn't run on startup or uninstall it._
Note
Hybrid Mode/GPU Working Mode options are not Advanced Optimus and work separately from it.
There are two main way you can use your dGPU:
- Hybrid mode on - internal laptop display is connected to integrated GPU, discrete GPU will work when needed and power off when not in use, giving better battery life
- Hybrid mode off (aka dGPU) - internal laptop display is conenected directly to discreted GPU, giving best performance but also worst battery life
Switching between two modes requires restart.
On Gen 7 and 8 laptops, there are additional 2 settings for Hybrid mode:
- Hybrid iGPU-only - in this mode dGPU will be disconnected (think of it like ejecting USB drive), so there is no risk of it using power when you want to achieve best battery life
- Hybrid Auto - similar to the above, but tries to automate the process by automatically disconnecting dGPU on battery power and reconnecting it when you plug in AC adapter
Discrete GPU may not disconnect, and in most cases will not disconnect, when it is used. That includes apps using dGPU, external monitor connected and probably some other cases that aren't specified by Lenovo. If you use the "Deactivate GPU" option in UDT, make sure that it reports dGPU Powered Off and no external screens are connected, before switching between Hybrid Modes in case you encounter problems.
All above settings are using built in functions of the EC and how well they work relies on Lenovo's firmware implementation. From my observations, they are reliable, unless you start switching them frequently. Be patient, because changes to this methods are not instantanous. UDT also attempts to mitigate these issues, by disallowing frequent Hybrid Mode switching and additional attempts to wake dGPU if EC failed to do so. It may take up to 10 seconds for dGPU to reappear when switching to Hybrid Mode, in case EC failed to wake it.
If you encounter issues, you might try to try alternative, experimental method of handling GPU Working Mode - see Arguments section for more details.
Warning
Disabling dGPU via Device Manager DOES NOT disconnect the device and will cause high power consumption!
Sometimes discrete GPU stays active even when it should not. This can happen for example, if you work with an external screen and you disconnect it - some processes will keep running on discrete GPU keeping it alive and shortening battery life.
There are two ways to help the GPU deactivate:
- killing all processes running on dGPU (this one seems to work better),
- disabling dGPU for a short amount of time, which will force all processes to move to the integrated GPU.
Deactivate button will be enabled when dGPU is active, you have Hybrid mode enabled and there are no screens connected to dGPU. If you hover over the button, you will see the current P state of dGPU and the list of processes running on it.
Note
Some apps may not like this feature and crash when you use deactivate dGPU option.
The overclock option is intended for simple overclocking, similar to the one available in Vantage. It is not intended to replace tools like Afterburner. Here are some points to keep in mind:
- Make sure GPU overclocking is enabled in BIOS, if your laptop has such option.
- Overclocking does not work with Vantage or LegionZone running in the background.
- It is not recommended to use the option while using other tools like Afterburner.
- If you edited your Dashboard, you might need to add the control manually.
First of all, the Power Mode you see in UDT (or toggle with Fn+Q) is not the same as Power Plans (that you access from Control Panel) or Power Mode (that you can change from Settings app).
The modern (and recommended) approach is to use Windows Power Modes and only one, default, "Balanced (recommended)" power plan. You should have 3 Power Modes to choose from in Windows Settings app:
- Best power efficiency
- Balanced
- Best performance
You can assign these in UDT settings to each of Legion Power Modes: Quiet, Balance, Performance and Custom. If you choose to do so, respective Windows Power Mode will be automatically set when you change Legion Power Modes.
The legacy approach is to use multiple Power Plans, that some devices had installed from factory. If you decide to use them, or configure your own plans, leave the settings in Windows Settings app on the default "Balanced" setting. You can configure UDT to switch Power Plans automatically whenever you change the "Legion" Power Mode in UDT settings.
If you encounter issues with power mode or plan synchronization, especially when switching between the two approaches, you can reset Windows power settings to default using powercfg -restoredefaultschemes; shutdown /r /t command. This command will reset all power plans to default and reboot your device. All plans except for the default "Balanced (recommended)" will be deleted, so make sure to make a copy, if you plan on using them again.
On some laptops, it is possible to change the boot logo (the default "Legion" image you see at boot). Boot logo is not stored in UEFI - it is stored on the UEFI partition on boot drive. When setting custom boot logo, UDT conducts basic checks, like resolution, image format and calculates a checksum to ensure compatibility. However, the real verification happens on the next boot. UEFI will attempt to load the image from UEFI partition and show it. If that fails for whatever reason, default image will be used. Exact criteria, except for resolution and image format, are not known and some images might not be shown. In this case, try another image, edited with different image editor.
You can use "Run" step in Actions to start any program or script from Actions. To configure it, you need to provide path to the executable (.exe) or a script (.bat). Optionally, you can also provide arguments that the script or program supports - just like running anything from command line.
Examples
Shutdown laptop
- Executable path:
shutdown - Arguments:
/s /t 0
Restart laptop
- Executable path:
shutdown - Arguments:
/r
Runing a program
- Executable path:
C:\path\to\the\program.exe(if the program is on your PATH variable, you can use the name only) - Arguments:
(optional, for list of supported argument check the program's readme, website etc.)
Running a script
- Executable path:
C:\path\to\the\script.bat(if the script is on your PATH variable, you can use the name only) - Arguments:
(optional, for list of supported argument check the script's readme, website etc.)
Python script
- Executable path:
C:\path\to\python.exe(or justpython, if it is on your PATH variable) - Arguments:
C:\path\to\script.py
UDT automatically adds some LLT_* compatibility variables to the process environment that can be accessed from within the script. They are useful for more advanced scripts, where context is needed. Depending on what was the trigger, different variables are added.
Environment variables
- When AC power adapter is connected
LLT_IS_AC_ADAPTER_CONNECTED=TRUE
- When low wattage AC power adapter is connected
LLT_IS_AC_ADAPTER_CONNECTED=TRUELLT_IS_AC_ADAPTER_LOW_POWER=TRUE
- When AC power adapter is disconnected
LLT_IS_AC_ADAPTER_CONNECTED=FALSE
- When Power Mode is changed:
LLT_POWER_MODE=<value>, wherevalueis one of:1- Quiet,2- Balance,3- Performance,255- CustomLLT_POWER_MODE_NAME=<value>, wherevalueis one of:QUIET,BALANCE,PERFORMANCE,CUSTOM
- When game is running
LLT_IS_GAME_RUNNING=TRUE
- When game closes
LLT_IS_GAME_RUNNING=FALSE
- When app starts
LLT_PROCESSES_STARTED=TRUELLT_PROCESSES=<value>, wherevalueis comma separated list of process names
- When app closes
LLT_PROCESSES_STARTED=FALSELLT_PROCESSES=<value>, wherevalueis comma separated list of process names
- Lid opened
LLT_IS_LID_OPEN=TRUE
- Lid closed
LLT_IS_LID_OPEN=FALSE
- When displays turn on
LLT_IS_DISPLAY_ON=TRUE
- When displays turn off
LLT_IS_DISPLAY_ON=FALSE
- When external display is connected
LLT_IS_EXTERNAL_DISPLAY_CONNECTED=TRUE
- When external display is disconnected
LLT_IS_EXTERNAL_DISPLAY_CONNECTED=FALSE
- When HDR is on
LLT_IS_HDR_ON=TRUE
- When HDR is off
LLT_IS_HDR_ON=FALSE
- When WiFi is connected
LLT_WIFI_CONNECTED=TRUELLT_WIFI_SSID=<value>, wherevalueis the SSID of the network
- When WiFi is disconnected
LLT_WIFI_CONNECTED=FALSE
- At specified time
LLT_IS_SUNSET=<value>, wherevalueisTRUEorFALSE, depending on configuration of the triggerLLT_IS_SUNRISE=<value>, wherevalueisTRUEorFALSE, depending on configuration of the triggerLLT_TIME", wherevalueisHH:mm, depending on configuration of the triggerLLT_DAYS", wherevalueis comma separated list of:MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY, depending on configuration of the trigger
- Periodic action
LLT_PERIOD=<value>, wherevalueis the interval in seconds
- On startup
LLT_STARTUP=TRUE
- On resume
LLT_RESUME=TRUE
If "Wait for exit" is checked, UDT will capture the output from standard output of the launched process. This output is stored in $RUN_OUTPUT$ variable and can be displayed in Show notification step.
It is possible to control some features of UDT directly from the command line. The CLI executable is still called llt.exe for compatibility and can be found in the install directory.
For CLI to work properly, UDT needs to run in the background and CLI option needs to be enabled in UDT settings. You can also chose to add llt.exe to your PATH variable for easier access.
CLI does not need to be ran as Administrator.
Features
llt quickAction --list- list all Quick Actionsllt quickAction <name>- run Quick Action with given<name>llt feature --list- list all supported featuresllt feature get <name>- get value of a feature with given<name>llt feature set <name> --list- list all values for a feature with given<name>llt feature set <name> <value>- set feature with given<name>to a specified<value>llt spectrum profile get- get current profile Spectrum RGB is set tollt spectrum profile set <profile>- set Spectrum RGB profile to<profile>llt spectrum brightness get- get current brightness Spectrum RGB is set tollt spectrum brightness set <brightness>- set Spectrum RGB brightness to<brightness>llt rgb get- get current 4-zone RGB presetllt rgb set <profile>- set 4-zone RGB to<preset>
UDT supports a comprehensive plugin system that allows extending the functionality of the application. Plugins can be installed, updated, and uninstalled dynamically with full UI support.
Official plugins for UDT are maintained in the separate UniversalDeviceToolkit-Plugins repository. That repository contains plugin source code, manifests, release metadata, and integration-specific assets that are distributed through the Plugin Extensions page.
- Dynamic Loading: Plugins are loaded at runtime from the
Build/pluginsdirectory - Online Plugin Repository: Browse and install plugins from an online repository
- Dependency Management: Automatic installation and checking of plugin dependencies
- UI Integration: Plugins can provide custom UI pages and settings
- Feature Extensions: Plugins can extend existing features or add new ones
- Lifecycle Management: Complete plugin lifecycle from installation to uninstallation
- Download Progress: Real-time download progress for online plugins
- Executable Support: Plugins can provide standalone executable files
- Language Support: Per-plugin language settings
- System Plugins: Built-in plugins that provide core functionality
- Third-party Plugins: Community-created plugins that extend UDT's capabilities
UDT currently provides the following plugins:
- ViVeTool Plugin: Manage Windows feature flags, enable or disable experimental Windows features
UDT provides a comprehensive Plugin Extensions page with the following features:
- Plugin Browsing: View all available plugins (local and online)
- Search & Filter: Search plugins by name or description, filter by installation status
- Plugin Details: View detailed information about each plugin
- Install/Uninstall: Easy one-click installation and uninstallation
- Online Updates: Check for and install updates from the online repository
- Permanent Deletion: Option to permanently delete plugin files
- Language Settings: Set per-plugin language preferences
Plugins can be installed in two ways:
-
Online Installation:
- Open the Plugin Extensions page
- Browse available plugins
- Click on a plugin to view details
- Click "Install" to download and install automatically
-
Manual Installation:
- Download the plugin DLL file
- Place it in the
Build/pluginsdirectory - Restart UDT, or use the plugin manager UI to scan for new plugins
For information on how to develop plugins for UDT, please refer to the plugin development documentation.
Special thanks to:
- ViRb3, for creating Lenovo Controller, which was used as a base for this tool
- falahati, for creating NvAPIWrapper and WindowsDisplayAPI
- SmokelessCPU, for help with 4-zone RGB and Sprectrum keyboard support
- Mario Bălănică, for all contributions
- Ace-Radom, for all contributions
Translations provided by:
- Bulgarian - Ekscentricitet
- Chinese (Simplified) - 凌卡Karl, Ace-Radom
- Chinese (Traditional) - flandretw
- Czech - J0sef
- Dutch - Melm, JarneStaalPXL
- French - EliotAku, Georges de Massol, Rigbone, ZeroDegree
- German - Sko-Inductor, Running_Dead89
- Greek - GreatApo
- Italian - Lampadina17
- Karakalpak - KarLin, Gulnaz, Niyazbek Tolibaev, Shingis Joldasbaev
- Latvian - RJSkudra
- Romanian - Mario Bălănică
- Slovak - Mitschud, Newbie414
- Spanish - M.A.G.
- Polish - Mariusz Dziemianowicz
- Portugese - dvsilva
- Portuguese (Brasil) - Vernon
- Russian - Edward Johan
- Turkish - Undervolt
- Ukrainian - Vladyslav Prydatko, Dmytro Zozulia
- Vietnamese - Not_Nhan, Kuri, Nagidrop
Many thanks to everyone else, who monitors and corrects translations!
- Why do I get a message that Vantage is still running, even though I uninstalled it?
- Why is my antivirus reporting that the installer contains a virus/trojan/malware?
- Can I customize hotkeys?
- Can I customize Conservation mode threshold?
- Can I customize fans in Quiet, Balance or Performance modes?
- Why can't I switch to Performance or Custom Power Mode on battery?
- Why does switching to Performance mode seem buggy, when AI Engine is enabled?
- Why am I getting incompatible message after motherboard replacement?
- Why isn't a game detected, even though Actions are configured properly?
- Can I use other RGB software while using UDT?
- Will iCue RGB keyboards be supported?
- Can I have more RGB effects?
- Can you add fan control to other models?
- Why don't I see the custom tooltip when I hover the UDT icon in tray?
- How can I OC/UV my CPU?
- What if I overclocked my GPU too much?
- Why is my Boot Logo not applied?
- Why do I see stuttering when using Smart Fn Lock?
- Which generation is my laptop?
Starting from version 2.14.0, UDT is much more strict about detecting leftover processes related to Vantage. Vantage installs 3 components:
- Lenovo Vantage app
- Lenovo Vantage Service
- System Interface Foundation V2 Device
The easiest solution is to go into UDT settings and select options to disable Lenovo Vantage, LegionZone and Hotkeys (only still installed ones are shown).
If you want to remove them instead, make sure that you uninstall all 3, otherwise some options in UDT will not be available. You can check Task Manager for any processes containing Vantage or ImController. You can also check this guide for more info: Uninstalling System Interface Foundation V2 Device, if you have troubles getting rid of ImController processes.
UDT makes use of many low-level Windows APIs that can be falsely flagged by antiviruses as suspicious, resulting in a false-positive. UDT is open source and can easily be audited by anyone who has any doubts as to what this software does. All installers are built directly on GitHub with GitHub Actions, so that there is no doubt what they contain. This problem could be solved by signing all code, but I can't afford spending hundreds of dollars per year for an Extended Validation certificate.
If you downloaded the installer from this projects website, you shouldn't worry - the warning is a false-positive. That said, if you can help with resolving this issue, let's get in touch.
You can customize Fn+F9 hotkey in UDT settings. Other hotkeys can't be customized.
No. Conservation mode threshold is set in firmware to 60% (2021 and earlier) or 80% (2022 and later) and it can't be changed.
No, it isn't possible to customize how the fan works in power modes other than Custom.
Starting with version 2.11.0, UDT's behavior was aligned with Vantage and Legion Zone and it does not allow using them without an appropriate power source.
If for whatever reason you want to use these modes on battery anyway, you can use --allow-all-power-modes-on-battery argument. Check Arguments section for more details.
Warning
Power limits and other settings are not applied correctly on most devices when laptop is not connected to full power AC adapter and unpredictable and weird behavior is expected. Therefore, no support is provided for issues related to using this argument.*
It seems that some BIOS versions indeed have weird issues when using Fn+Q. Only hope is to wait for Lenovo to fix it.
Sometimes new motherboard does not contain correct model numbers and serial numbers. You should try this tutorial to try and recover them.
Game detection feature is built on top of Windows' game detection, meaning UDT will react to EXE files that Windows considers "a game". That also means that if you nuked Xbox Game Bar from your installation, there is 99.9% chance this feature will not work.
Windows probably doesn't recognize all games properly, but you can mark any program as game in Xbox Game Bar settings (Win+G). You can find list of recognized games in registry: HKEY_CURRENT_USER\System\GameConfigStore\Children.
In general, yes. UDT will disable RGB controls when Vantage is running to avoid conflicts. If you use other RGB software like L5P-Keyboard-RGB or OpenRGB, you can disable RGB in UDT to avoid conflicts with --force-disable-rgbkb or --force-disable-spectrumkb argument. Check Arguments section for more details.
No. Check out OpenRGB project.
Only options natively supported by hardware are available; adding support for custom effects is not planned. If you would like more customization check out L5P-Keyboard-RGB or OpenRGB.
Fan control is available on Gen 7 and later models. Older models will not be supported due to technical limitations.
In Windows 10 and 11, Microsoft did plenty of changes to the tray, breaking a lot of things on the way. As a results custom tooltips not always work properly. Solution? Update your Windows and keep fingers crossed.
There are very good tools like Intel XTU (which is used by Vantage) or ThrottleStop made just for that.
If you end up in a situation where your GPU is not stable and you can't boot into Windows, there are two things you can do:
- Go into BIOS and try to find and option similar to "Enabled GPU Overclocking" and disable it, start Windows, and toggle the BIOS option again to Enabled.
- Start Windows in Safe Mode, and delete
gpu_oc.jsonfile under the compatibility settings directory, which is located in"%LOCALAPPDATA%\LenovoLegionToolkit.
When you change the Boot Logo, UDT verifies that it is in the format that is correct format and correct resolution. If UDT shows that boot logo is applied, it means that the setting was correctly saved to UEFI. If you don't see the custom boot logo, it means that even though UEFI is configured and custom image is saved to UEFI partition, your UEFI for some reason does not render it. In this case the best idea is to try a different image, maybe in different format, edited with different image editor etc. If the boot logo is not shown after all these steps, it's probably a problem with your BIOS version.
On some BIOS versions, toggling Fn Lock causes a brief stutter and since Smart Fn Lock is basically an automatic toggle for Fn Lock, it is also affected by this issue. Try disabling "Fool proof Fn Lock" (or similar) option in BIOS - it was reported that it fixes stutter when toggling Fn Lock.
In latest version UDT removes this feature for Chinese models due to increasing unreliability. If you got warranty infos before it should be displayed normally, but after manually refreshing or deleting stored datas the infos will disappear. This change only affects users with a Chinese Legion laptop.
Check the model number. Example model numbers are 16ACH6H or 16IAX7. The last number of the model number indicates generation.
Some, less frequently needed, features or options can be enabled by using additional arguments. These arguments can either be passed as parameters or added to args.txt file.
--trace- enables logging to%LOCALAPPDATA%\LenovoLegionToolkit\log--minimized- starts UDT minimized to tray--disable-tray-tooltip- disables tray tooltip that is shown when you hover the cursors over tray icon--allow-all-power-modes-on-battery- allows using all Power Modes without AC adapter (No support is provided when this argument is used)--force-disable-rgbkb- disables all lighting features for 4-zone RGB keyboards--force-disable-spectrumkb- disables all lighting features for Spectrum per-key RGB keyboards--force-disable-lenovolighting- disables all lighting features related to panel logo, ports backlight and some white backlit keyboards--experimental-gpu-working-mode- changes GPU Working Mode switch to use experimental method, that is used by LegionZone (No support is provided when this argument is used)--proxy-url=example.com- specifies proxy server URL that UDT should use--proxy-username=some_username- if applicable, specifies proxy server username to use--proxy-password=some_password- if applicable, specifies proxy server password to use--proxy-allow-all-certs- if needed relaxes criteria needed to establish HTTPS/SSL connections via proxy server--disable-update-checker- disable update checks in UDT, in case you want to rely on winget, scoop etc.
If you decide to use the arguments with args.txt file:
- Go to
%LOCALAPPDATA%\LenovoLegionToolkit - Create or edit
args.txtfile in there - Paste one argument per line
- Start UDT
Arguments not listed above are no longer needed or available.
In all troubleshooting situations, logs provide important information. Always attach logs to your issues. Critical error logs are saved automatically and saved under "%LOCALAPPDATA%\LenovoLegionToolkit\log".
To collect logs:
- Make sure that Universal Device Toolkit is not running (also gone from tray area).
- Open
Run(Win+R) and start the app with--trace. During the rename, the compatibility path may still be"%LOCALAPPDATA%\Programs\LenovoLegionToolkit\Lenovo Legion Toolkit.exe" --trace. - UDT will start and in the title bar you should see:
[LOGGING ENABLED] - Reproduce the issue you have (i.e. try to use the option that causes issues)
- Close UDT (also make sure it's gone from tray area)
- Again, in
Run(Win+R) type"%LOCALAPPDATA%\LenovoLegionToolkit\log" - You should see at least one file. Theses are the logs you should attach to the issue.
I appreciate any feedback that you have, so please do not hesitate to report issues. Pull Requests are also welcome, but make sure to check out CONTRIBUTING.md first!
Important
If your laptop is not part of Legion, IdeaPad Gaming or LOQ series, this software is not for you. Do not open compatibility requests for other devices.
It would be great to expand the list of compatible devices, but to do it your help is needed!
If you are willing to check if this app works correctly on your device that is currently unsupported, click Continue on the popup you saw on startup. Universal Device Toolkit will start logging automatically so you can submit them if anything goes wrong.
Remember that some functions may not function properly.
I would appreciate it, if you create an issue here on GitHub with the results of your testing.
Make sure to include the following information in your issue:
- Full model name (i.e. Legion 5 Pro 16ACH6H)
- List of features that are working as expected.
- List of features that seem to not work.
- List of features that crash the app.
The more info you add, the better the app will get over time. If anything seems off, write down precisely what was wrong and attach logs (%LOCALAPPDATA%\LenovoLegionToolkit\log).
UDT localization is managed through Crowdin with a repository-level config at crowdin.yml.
- Source files: neutral
Resource.resxin four modules:UniversalDeviceToolkit.WPF/ResourcesUniversalDeviceToolkit.Lib/ResourcesUniversalDeviceToolkit.Lib.Automation/ResourcesUniversalDeviceToolkit.Lib.Macro/Resources
- Target files:
Resource.<locale>.resxbeside each source file. - Locale mapping is defined in
crowdin.yml(for examplezh-CN -> zh-hans,zh-TW -> zh-hant,pt-BR -> pt-br).
Typical CLI commands:
# upload source strings
crowdin upload sources --config crowdin.yml
# upload existing translations
crowdin upload translations --config crowdin.yml
# download translated files
crowdin download --config crowdin.ymlAdditional documentation is available in the Docs/ directory:
| Document | Description |
|---|---|
| ARCHITECTURE.md | System architecture, components, and data flow |
| DEPLOYMENT.md | Build, test, deployment, and release procedures |
| PLUGIN_DEVELOPMENT.md | Plugin SDK and implementation guide |
| SECURITY.md | Security policy and best practices |
| CODE_OF_CONDUCT.md | Community guidelines and contribution standards |
Captured at 1300×850 logical window size via Tools/VisualRegression.Smoke (IPC render; pixel dimensions follow Windows display scale). README images are displayed at 700 px width.
| File | Description |
|---|---|
Assets/Screenshot_main.png |
Main application interface (English, Dark theme) |
Assets/Screenshot_zh-hans.png |
Chinese localization interface (Dark theme) |
- Application won't start? Check .NET 10.0 installation
- Features not working? See compatibility section
- Logs needed? Follow log collection guide
- Still need help? Open a GitHub Issue
Universal Device Toolkit is distributed under the GNU GPL v3.0. See LICENSE.
This project is a modified continuation derived from Lenovo Legion Toolkit, originally created by Bartosz Cichecki. Original author attribution and copyright information are preserved in NOTICE; Universal Device Toolkit changes are maintained by Universal Device Toolkit contributors.
