Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time

To get automatically notified about SDK changes, you can subscribe to change tracking issue on GitHub.


  • Fixed
    • Creating OffscreenWebView with custom user agent fails
    • Crash when adding sidebar items
    • OnGameStopped stopped event is called too early


  • New
    • Added selected ROM file and source game action to game starting events.
    • Exposed selected Desktop view mode in UI API.
    • Added option to select multiple games.
    • Exposed list of currently filtered games.
    • Exposed completion status settings.
    • Added option to set user agent for specific web view instance.
    • New model changes related to added option to override built-in emulator arguments.
    • You can now use F12 on web view windows to open Chromium dev tools.


  • New
    • IsMusicMuted property exposed in settings API.


  • Breaking Changes

    • Many breaking changes to the entire SDK. All extensions and themes have to updated to work with Playnite 9. See Playnite 9 migration guide for more details.
    • Removed IronPython support.
    • Extensions no longer log into main playnite.log log file, but instead log into separate extensions.log file.
    • Playnite 9 changes how library files are stored on disk. This is not breaking change to the SDK, but some existing extensions modify library files directly (which was never supported) and those will not work anymore.
  • New

    • PowerShell extensions are now implemented as proper PowerShell modules.
    • Playnite now includes built-in add-on browser that can be used to install/update extension. You need to publish your extension to add-on repository for it to work.
    • Ability to inject elements into Sidebar, Top panel and any custom theme that supports specific extension element explicitly.
    • Ability to dynamically inject play, install and uninstall actions.
    • You can now load extensions from custom directories via For developers settings menu.
    • Added Trace severity log messages. These are not written into log files unless enabled in For developers settings menu.
    • Import exclusions can be controlled via the SDK.
    • Themes can now add custom mouse cursor and sound files.


  • New
    • Ability to change progress text when using ActivateGlobalProgress
    • CurrentExtensionInstallPath and CurrentExtensionDataPath global variables for script extensions


  • New
    • ActivateGlobalProgress can now report specific progress status.
    • CanExecuteJavascriptInMainFrame property for WebViews.
    • Various data serialization methods (JSON, YAML, TOML)
    • CreateWindow for creating native Playnite windows with styling.
    • GetCurrentAppWindow to get currently active Playnite window.


  • Breaking Changes:

    • Playnite will no longer load plugins that reference non-SDK Playnite assemblies. See this page for more information.
    • Playnite will no longer install extensions and themes that don't have proper version specified. The version string must a valid .NET version string!
  • Now obsolete:

    • These changes do not break compatibility in current version (mentioned methods are still available in SDK), but they will be made breaking in future major Playnite updates.
    • Added Id to extension and theme manifests. This field is currently not mandatory for existing extensions (Playnite 8 will load installed extensions without an ID, but will not install new ones without an ID), but should be provided for better extension installation and update support. Toolbox will not pack new extensions unless Id is present.
    • The way custom menu items are implemented (for main menu and game menu) has been completely changed (the old system still works temporarily). See related documentation page for more information.
    • NavigationChanged from IWebView is now obsolete, use new LoadingChanged instead.
  • New

    • Metadata plugins can now provide Features, AgeRating, Series, Region and Platform data.
    • Extensions can now provide custom menu items for game menus, including nested entries.
    • Most useful Playnite settings are now exposed in IPlayniteSettingsAPI.
    • ActivateGlobalProgress method to show blocking progress dialog.
    • LoadingChanged event for WebViews.
    • EvaluateScriptAsync method to execute JS code in a WebView.
    • GetCookies method to get webview cookies.
    • MarkdownToHtml method for converting Markdown markup to HTML.


  • Breaking Changes:

    • Toolbox utility has been reworked and accepts different arguments then previously.
  • New

    • Library plugins can now support extra capabilities.
    • Added ImportGame methods to more easily add new games to the library.
    • Added OpenPluginSettings method to open view with extension settings (also accessible via OpenSettingsView method inherited from Plugin class).
    • Added StartGame.
    • Added UriHandler for registering of custom URI method actions.
    • Added option settings when creating offscreen web view (currently only option to disable JavaScript execution).
    • Added OnGameSelected, OnApplicationStopped and OnLibraryUpdated events.
    • Added Features game field and appropriate support for it in metadata plugins.
    • Toolbox utility can now generate plugins and scripts.
    • Toolbox utility can pack plugins and scripts into .pext file that can be used for easier distribution and installation.


  • New
    • Added support for creating metadata providers via plugins.
    • ChooseImageFile method for dialogs API. Only available in Desktop mode.
    • ChooseItemWithSearch method for dialogs API. Only available in Desktop mode.


  • Removed reference to LiteDB package. You can remove it from your plugin project if it's present.


  • Breaking Changes:

    • Extension plugins are no longer created by inheriting plugin interface, but rather extending Plugin and LibraryPlugin abstract classes.
    • IGameDatabase interface is completely changed and every object collection (Games, Genres, Tags etc.) is now accessible via appropriate IItemCollection property.
    • Game changed dramatically. Fields like genres, tags and others are no longer part of the model itself but just ID pointers to appropriate database objects.
  • New

    • Extended several API with new methods.


  • Breaking Changes:
    • Removed and added new APIs and API members.
    • Game files are no longer stored in single database file. All game and media files are now accessible in their raw form even without user of database API.


  • Breaking Changes:

    • In order to unify terminology used in Playnite's UI and that in SDK, some classes and class members were renamed.
    • Extensions (both plugins and scripts) have to provide extension manifest otherwise they won't be loaded.
      • Various information about extension (author, version etc.) must be now stored in manifest file.
    • Both plugins and scripts have to be stored in the same folder called Extensions (rather then in separate Plugins or Scripts folders).
    • Signature for default C# plugins has changed and they now have to implement IGenericPlugin interface to be loaded.
  • New Plugin types. There are now two types of plugins that can be implemented:

    • Generic Plugin: Same as the old plugins.
    • Library Plugin: Used to add new library providers responsible for automatic game import from various sources.
      • All existing supported library importers (Steam, GOG etc.) are now distributed as library plugins.
  • New APIs:

    • Static LogManager for easier log operations.
    • Web Views API for creating web view windows or accessing offscreen browser.
    • Resources API for getting application resources like localized strings.
    • Paths API providing information about Playnite's application paths.
    • Application Info API providing information about Playnite.
  • New Methods

    • GetPluginUserDataPath: Gets path dedicated for plugins to store user data.
    • GetPluginConfiguration: Gets plugin configuration if available.
    • LoadPluginSettings: Loads plugin settings.
    • SavePluginSettings: Saves plugin settings.
    • ExpandGameVariables: Expands dynamic game variables in specified game action.
    • CreateLogger: Creates new instance of Playnite logger with name of calling class.


  • Breaking Change: Scripts and Plugins must be place in subfolders rather then directly inside of Scripts or Plugins folders.
  • New: OnGameStarting event that will execute before game is started. See events for use from scripts.
  • New: ShowErrorMessage method in IDialogsFactory