Table of Contents

Playnite 9 add-on migration guide

Extension load changes

Scripts

IronPython support has been removed completely, therefore you have to rewrite those to PowerShell.

PowerShell extensions are now imported as PowerShell modules. The extension of the file must be .psm1 (or .psd1 if you use a PowerShell module manifest).

Any exported functions from your extension must be exported from the module. In a .psm1 file all functions in the module scope are exported by default, but functions in the global scope (defined like function global:OnGameStarted()) will not be correctly exported. Exported functions must accept the exact number of arguments that Playnite passes to them.

Plugins

Generic plugins now have to inherit from GenericPlugin class, not Plugin class, otherwise they won't be loaded at all.

Model changes

Multiple changes have been made to various data models, properties removed, renamed, added. This primarily affects Game and Emulator objects.

Note

Since PowerShell is not a statically typed language there's no easy way how to find all model changes you need to fix. Please take care and make sure that you fix and test your code properly, especially if you are writing data to the game library, since you could write bad data to it if you don't adjust your scripts properly.

File changes:

M source/PlayniteSDK/BuiltInExtensions.cs
M source/PlayniteSDK/Collections/ObservableObject.cs
M source/PlayniteSDK/Data/DataSerialization.cs
M source/PlayniteSDK/Database/IGameDatabase.cs
M source/PlayniteSDK/Database/IItemCollection.cs
M source/PlayniteSDK/Events/ApplicationEvents.cs
M source/PlayniteSDK/Exceptions/ScriptRuntimeException.cs
M source/PlayniteSDK/ExpandableVariables.cs
M source/PlayniteSDK/Extensions/ListExtensions.cs
M source/PlayniteSDK/IDialogsFactory.cs
M source/PlayniteSDK/ILogger.cs
M source/PlayniteSDK/IMainViewAPI.cs
M source/PlayniteSDK/IPlayniteAPI.cs
M source/PlayniteSDK/IPlayniteSettingsAPI.cs
M source/PlayniteSDK/IWebView.cs
M source/PlayniteSDK/LogManager.cs
M source/PlayniteSDK/MetadataProvider.cs
M source/PlayniteSDK/Models/AppSoftware.cs
M source/PlayniteSDK/Models/CompletionStatus.cs
M source/PlayniteSDK/Models/DatabaseObject.cs
M source/PlayniteSDK/Models/Emulator.cs
M source/PlayniteSDK/Models/Game.cs
M source/PlayniteSDK/Models/GameAction.cs
M source/PlayniteSDK/Models/PastTimeSegment.cs
M source/PlayniteSDK/Models/Platform.cs
M source/PlayniteSDK/Models/Region.cs
M source/PlayniteSDK/Plugins/LibraryPlugin.cs
M source/PlayniteSDK/Plugins/MetadataPlugin.cs
M source/PlayniteSDK/Plugins/Plugin.cs
M source/PlayniteSDK/Properties/AssemblyInfo.cs
M source/PlayniteSDK/RelayCommand.cs
M source/PlayniteSDK/ResourceProvider.cs

Method changes

All event and other methods that previously accepted multiple arguments have been consolidated into single argument object. This is true for both plugin and script methods.

Game action controllers

Controllers (for installing/uninstalling and starting games) have been reworked. See related documentation page for more information about how to implement them in Playnite 9.

Metadata plugin changes

Metadata sources no longer return data as strings but instead use MetadataProperty objects. See metadata plugin page for more information.

Other

Extensions no longer log to main log file (playnite.log), but use a separate file called extensions.log.

Themes

Use Toolbox utility to update theme files to new version, this is absolutely necessary otherwise Blend will no longer load your theme properly. Note that some styles/views are no longer available, others have been moved or renamed. There are also new styles added to support styling of controls that were previously not exposed to themes (like filter panel dropdowns and search boxes).

Playnite 9 also changes how theme files are loaded, which should solve inheritance issue with static references. For example if you had custom CheckBox style then changes from global CheckBox style would not be applied to inherited style and you had to define the whole inherited style. This is no longer needed and theme global styles should be inherited properly.

File changes:

To see what letters before file change mean check this page.

M source/Playnite.DesktopApp/Themes/Desktop/Default/Constants.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/ComboBoxList.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/ExtendedDataGrid.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/FilterSelectionBox.xaml
D source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/MainMenu.xaml
D source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/NullableIntBox.xaml
D source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/NumericBox.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/NumericBoxes.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/PathSelectionBox.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/SearchBox.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/SidebarItem.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/SliderEx.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/TopPanelItem.xaml
D source/Playnite.DesktopApp/Themes/Desktop/Default/CustomControls/ViewSettingsMenu.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/CheckBox.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/DataGrid.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/Expander.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/ScrollViewer.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/Slider.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/TabControl.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DefaultControls/Thumb.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/DerivedStyles/GridViewGroupStyle.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/DerivedStyles/ListViewGroupStyle.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DerivedStyles/PlayButton.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/DerivedStyles/PropertyItemButton.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Media.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Views/DetailsViewGameOverview.xaml
D source/Playnite.DesktopApp/Themes/Desktop/Default/Views/FilterPanel.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/Views/FilterPanelView.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Views/GridViewGameOverview.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Views/Library.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Views/LibraryDetailsView.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Views/LibraryGridView.xaml
D source/Playnite.DesktopApp/Themes/Desktop/Default/Views/MainPanel.xaml
M source/Playnite.DesktopApp/Themes/Desktop/Default/Views/Sidebar.xaml
A source/Playnite.DesktopApp/Themes/Desktop/Default/Views/TopPanel.xaml
D source/Playnite.DesktopApp/Themes/Desktop/DefaultRed/Constants.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Constants.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/CustomControls/FilterDbItemtSelection.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/CustomControls/FilterEnumListSelection.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/CustomControls/FilterPresetSelector.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/CustomControls/FilterStringListSelection.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/CustomControls/WindowBase.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/Button.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/CheckBox.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/ComboBox.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/ScrollViewer.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/Slider.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/TextBox.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/ToggleButton.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DefaultControls/ToolTip.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ButtonBottomMenu.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ButtonFilterNagivation.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ButtonMainMenu.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ButtonMessageBox.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ButtonTopMenu.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ButtonVirtualKeyboard.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/CheckBoxSettings.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ListGameItem.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ListGameItemStyle.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ListGameItemTemplate.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/MainWindowStyle.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/DerivedStyles/ToggleButtonTopFilter.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Images/ButtonPrompts/PlayStation/PlayStation.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Images/ButtonPrompts/Xbox/Xbox.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/ActionSelection.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/Filters.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/FiltersAdditional.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/FiltersView.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/GameDetails.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/GameMenu.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/GameStatus.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/Main.xaml
M source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/MainMenu.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/MessageBox.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/Notifications.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/NotificationsMenu.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/SettingsMenu.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/SettingsMenus.xaml
A source/Playnite.FullscreenApp/Themes/Fullscreen/Default/Views/TextInput.xaml
D source/Playnite.FullscreenApp/Themes/Fullscreen/DefaultLime/Constants.xaml