Interface: PluginPackageManager
This Core Interface provides MAXScript access to the Plugin Package Manager that handles plug-ins packaged in the Autodesk Bundle format.
Available in 3ds Max 2014 and higher.
ExchangeStorePackageManager
. It was renamed in 3ds Max 2020 to PluginPackageManager
. However, a global variable named ExchangeStorePackageManager
points to the re-named interface to prevent older scripts from breaking.Properties:
PluginPackageManager.verboseLogging : boolean : Read|Write
Enables/disables verbose logging for future sessions. Value persisted to 3dsmax.ini.
[PluginPackageManager]
VerboseLogging=1
When true, results in verbose logging of plug-in package loading behavior to display in the Plugin Package Manager Message dialog. This additional information will show:
- The package file root folders being processed.
- The package files being processed.
- Which package files are not loaded due to runtime requirements.
- Which package files are not loaded due to missing dependent bundles.
- The values being set for environment variables.
Methods:
<integer>PluginPackageManager.GetNativePlugInCount()
Returns the number of native plugins.
<filename>PluginPackageManager.GetNativePlugInFullPath <index>index
Returns the full file name of the indexed native plugin.
<integer>PluginPackageManager.GetManagedAssemblyCount()
Returns the number of managed assemblies.
<filename>PluginPackageManager.GetManagedAssemblyFullPath <index>index
Returns the full file name of the indexed managed assembly.
<integer>PluginPackageManager.GetUISchemeCount()
Returns the number of UI Schemes.
<filename>PluginPackageManager.GetUISchemeFullPath <index>index
Returns the full file name of the indexed UI Scheme.
<integer>PluginPackageManager.GetDefaultSettingCount()
Returns the number of Default Settings.
<filename>PluginPackageManager.GetDefaultSettingFullPath <index>index
Returns the full file name of the indexed Default Setting.
<integer>PluginPackageManager.GetMaxscriptsCount()
Returns the number of MAXScripts.
<filename>PluginPackageManager.GetMaxscriptsFullPath <index>index
Returns the full file name of the indexed MAXScript.
<integer>PluginPackageManager.GetMacroscriptsCount()
Returns the number of MacroScripts.
<filename>PluginPackageManager.GetMacroScriptsFullPath <index>index
Returns the full file name of the indexed MacroScript.
<integer>PluginPackageManager.GetPostStartUpScriptsCount()
Returns the number of Startup Scripts.
<filename>PluginPackageManager.GetPostStartUpScriptFullPath <index>index
Returns the full file name of the indexed Startup Script.
<integer>PluginPackageManager.GetMetaSLShaderPathCount()
Returns the number of MetaSL Shaders.
<filename>PluginPackageManager.GetMetaSLShaderFullPath <index>index
Returns the full file name of the indexed MetaSL Shader.
<integer>PluginPackageManager.GetMiFileCount()
Returns the number of .mi files.
<filename>PluginPackageManager.GetMiFileFullPath <index>index
Returns the full file name of the indexed .mi file.
<integer>PluginPackageManager.GetLightIconPathsCount()
Returns the number of light icon paths.
<filename>PluginPackageManager.GetLightIconPathFullPath <index>index
Returns the full file name of the indexed light icon path.
<integer>PluginPackageManager.GetDarkIconPathsCount()
Returns the number of dark icon paths.
<filename>PluginPackageManager.GetDarkIconPathFullPath <index>index
Returns the full file name of the indexed dark icon path.
<void>PluginPackageManager.ProcessCustomInstallDirectory <filename>path
Processes the given custom install directory filepath.
<void>PluginPackageManager.GetPackageInstallPathByUpgradeCode <string>upgradeCode
Returns the install path associated with the plugin package with the specified upgradeCode
. Available in 3ds Max 2020 and higher.
pathConfig.GetExchangeStorePlugInInstallPath <string>productCode
which used the product code as the key.<integer>PluginPackageManager.GetOSLFoldersCount()
Returns the number of OSL paths. Available in 3ds Max 2021 and higher.
<filename>PluginPackageManager.GetOSLFolderFullPath <index>index
Returns the full OSL path specified by index
from the list of OSL paths.
Available in 3ds Max 2021 and higher.
<integer>PluginPackageManager.GetAMGFoldersCount()
Returns the number of AMG paths. Available in 3ds Max 2021 and higher.
<filename>PluginPackageManager.GetAMGFolderFullPath <index>index
Returns the full AMG path specified by index
from the list of AMG paths.
Available in 3ds Max 2021 and higher.
<integer>PluginPackageManager.GetSceneConverterFoldersCount()
Returns the number of Scene Converter paths. Available in 3ds Max 2021 and higher.
<filename>PluginPackageManager.GetSceneConverterFolderFullPath <index>
Returns the full Scene Converter path specified by index
from the list of Scene Converter paths.
Available in 3ds Max 2021 and higher.
<integer>PluginPackageManager..GetHotkeyPathsCount()
Get the count of hotkey file paths.
Available in 3ds Max 2025.
<filename>PluginPackageManager.GetHotkeyFullPath <index>index
Get the full path of the i-th hotkey file.
Available in 3ds Max 2025.
<integer>PluginPackageManager.GetMenuPathsCount()
Get the count of menu file paths.
Available in 3ds Max 2025.
<filename>PluginPackageManager.GetMenuFullPath <index>index
Get the count of quad menu file paths.
Available in 3ds Max 2025.
<integer>PluginPackageManager.GetQuadMenuPathsCount()
Get the count of quad menu file paths.
Available in 3ds Max 2025.
<filename>PluginPackageManager.GetQuadMenuFullPath <index>index
Get the full path of the i-th quad menu file.
Available in 3ds Max 2025.
<integer>PluginPackageManager.GetPackageCount()
Get the number of packages loaded.
Available in 3ds Max 2025.
<string array>PluginPackageManager.GetPackageInfoByIndex <index>index
Returns package info as an 11 element array of strings.
#(UpgradeCode, PackageName, PackageVersionString, PackageDescription, AppVersion, PackageDirectory, PackagePath, CompanyName, CompanyUrl, CompanyEmail, CompanyPhone)
Available in 3ds Max 2025.
<string array>PluginPackageManager.GetPackageInfoByUpgradeCode <string>upgradeCode
Returns package info as an 11 element array of strings same as GetPackageInfoByIndex
.
Available in 3ds Max 2025.
<void>PluginPackageManager.ShowMessageDialog()
Opens the Plugin Package Manager Message dialog.
Available in 3ds Max 2025.
<integer>PluginPackageManager.GetComponentCount <enum>category
category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}
Gets the number of components specified for the given category.
Available in 3ds Max 2025.
<string array>PluginPackageManager.GetComponentInfo <enum>category <index>index
category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}
Gets component info as a 5 element array of strings:
#(UpgradeCode, Name, VersionString, Description, FullPath)
Available in 3ds Max 2025.
<integer>PluginPackageManager.GetPackageComponentCount <string>upgradeCode <enum>category
category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}
Gets the number of components specified for the given category by a specific package.
Available in 3ds Max 2025.
<string array>PluginPackageManager.GetPackageComponentInfo <string>upgradeCode <enum>category <index>index
category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}
Gets component info as a 5 element array of strings same as GetComponentInfo
.
Available in 3ds Max 2025.
<enum array>PluginPackageManager.GetComponentCategories()
GetComponentCategories enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}
Gets an array of the component category names.
Available in 3ds Max 2025.
<string>PluginPackageManager.GetLoggedMessages()
Gets all messages logged to the Plugin Package Manager Message dialog as a string.
Available in 3ds Max 2025.
<string array>PluginPackageManager.GetPackageLoadOrder()
Returns an array of upgradeCode strings of the packages in their load order. Normal load order is based on sorted upgrade code values, then modified if 'dependent' or 'load after' is specified for packages.
Available in 3ds Max 2025.
<integer>PluginPackageManager.GetPackageEnvironmentVariablesCount <string>upgradeCode
Returns the number of environment variable definitions in the given upgradeCode
plug-in package.
Available in 3ds Max 2025.
<boolean>PluginPackageManager.GetPackageEnvironmentVariable <string>upgradeCode <index>index <&string>name <&string>value <&enum>type
name is Out parameter
value is Out parameter
type enums: {#String|#Path}
type is Out parameter
Get the definition of a given environment variable specified by upgradeCode
and Index
and returns true if successful, false otherwise (for example, index out of range).
name
- the returned name of the environment variable if successful.value
- the returned value of the environment variable definition if successful.type
- the returned type of the environment variable if successful.Available in 3ds Max 2025.
EXAMPLE:
fn showPackageInfo =
(
local n = PluginPackageManager.GetPackageCount()
local fmtstr = "upgradeCode: %; packageName: %; packageVersion: %; packageDescription: %; companyName: %; packageDirectory: %\n"
for i = 1 to n do
(
local packageInfo = PluginPackageManager.GetPackageInfoByIndex i
local upgradeCode = packageInfo[1]
local packageName = packageInfo[2]
local packageVersion = packageInfo[3]
local packageDescription = packageInfo[4]
local companyName = packageInfo[5]
local packageDirectory = packageInfo[6]
format fmtstr upgradeCode packageName packageVersion packageDescription companyName packageDirectory
)
)
showPackageInfo()
OUTPUT: A PARTIAL RESULT FROM THE CALL
upgradeCode: {10a2f92d-c49b-46c2-834d-702be1dbeb07}; packageName: Retopology Tools for 3ds Max 2026; packageVersion: 1.6.0.16; packageDescription: 3ds Max 2026 Retopology Component; companyName: 1.6.0.16; packageDirectory: c:\programdata\autodesk\applicationplugins\retopology3dsmax2026\
upgradeCode: {15c129dd-e05a-49d7-bddc-b5fc3c3f8627}; packageName: Alembic; packageVersion: 1.0.0; packageDescription: Alembic Importer and Exporter for 3ds Max.; companyName: 1.0.0; packageDirectory: c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\
upgradeCode: {26302679-93fd-5bf6-94d9-bc29a7d8892a}; packageName: capholes; packageVersion: 1.0.0; packageDescription: ; companyName: 1.0.0; packageDirectory: c:\program files\autodesk\3ds max 2026\applicationplugins\capholes\
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; packageName: MAXtoA for 3ds Max 2026; packageVersion: 5.8.0.0; packageDescription: Arnold Plug-in for 3ds Max; companyName: 5.8.0.0; packageDirectory: c:\programdata\autodesk\applicationplugins\maxtoa_2026\
upgradeCode: {5a23cf1e-099c-47f9-a6bd-40054a082107}; packageName: Autodesk 3ds Max 2026 CivilView; packageVersion: 1.0.1.0; packageDescription: Autodesk 3ds Max 2026 CivilView; companyName: 1.0.1.0; packageDirectory: c:\program files\autodesk\3ds max 2026\applicationplugins\civilviewio\
OK
EXAMPLE:
fn showPackageNativePluginPath =
(
local n = PluginPackageManager.GetNativePlugInCount()
format "Native Plugin Paths:\n"
for i = 1 to n do
format " %\n" (PluginPackageManager.GetNativePlugInFullPath i)
)
showPackageNativePluginPath()
OUTPUT: A PARTIAL RESULT FROM THE CALL
Native Plugin Paths:
c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicimporter.dli
c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicexporter.dle
c:\program files\autodesk\3ds max 2026\applicationplugins\maxfluid\contents\bin\maxfluid.dlo
c:\program files\autodesk\3ds max 2026\applicationplugins\revitimporter\contents\revitimporter.dli
c:\program files\autodesk\3ds max 2026\applicationplugins\scenesecuritytools\contents\bin\securitytools.gup
c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\booleanmodifier.dlm
c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\arraymodifier.dlm
c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\bevelcutbackmodifier.dlm
c:\programdata\autodesk\applicationplugins\maxtoa_2026\assexport.dle
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldgeometrypropertiesmodifier.dlm
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldlightfiltermodifier.dlm
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldlight.dlo
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldinstanceshape.dlu
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldalembicobject.dlo
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldproceduralobject.dlo
c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldvolumeobject.dlo
OK
EXAMPLE:
fn showPackageNativePluginComponentInfo =
(
local n = PluginPackageManager.GetComponentCount #Plugins
format "Native Plugin Component Info:\n"
local fmtstr = "upgradeCode: %; componentName: %; componentVersion: %; componentDescription: %; componentPath: %\n"
for i = 1 to n do
(
local componentInfo = PluginPackageManager.GetComponentInfo #Plugins i
local upgradeCode = componentInfo[1]
local componentName = componentInfo[2]
local componentVersion = componentInfo[3]
local componentDescription = componentInfo[4]
local componentPath = componentInfo[5]
format fmtstr upgradeCode componentName componentVersion componentDescription componentPath
)
)
showPackageNativePluginComponentInfo()
OUTPUT: A PARTIAL RESULT FROM THE CALL
showPackageNativePluginComponentInfo()
Native Plugin Component Info:
upgradeCode: {15c129dd-e05a-49d7-bddc-b5fc3c3f8627}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicimporter.dli
upgradeCode: {15c129dd-e05a-49d7-bddc-b5fc3c3f8627}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicexporter.dle
upgradeCode: {af671c72-cbe1-5245-a2e5-16a57d4f7075}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\booleanobject\contents\booleanobject.dlo
upgradeCode: {26302679-93fd-5bf6-94d9-bc29a7d8892a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\capholes\contents\capholes.dlm
upgradeCode: {627ec730-ab0b-4d5b-b7c9-5f93e12d577f}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\scenesecuritytools\contents\bin\securitytools.gup
upgradeCode: {81d644ff-83e7-40ed-90e0-5f516f1e075a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\booleanmodifier.dlm
upgradeCode: {81d644ff-83e7-40ed-90e0-5f516f1e075a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\arraymodifier.dlm
upgradeCode: {81d644ff-83e7-40ed-90e0-5f516f1e075a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\bevelcutbackmodifier.dlm
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\maxtoa_2026\assexport.dle
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldgeometrypropertiesmodifier.dlm
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldlightfiltermodifier.dlm
OK
EXAMPLE:
for upgradeCode in (PluginPackageManager.GetPackageLoadOrder()) do
(
n = (PluginPackageManager.GetPackageEnvironmentVariablesCount upgradeCode)
pkgInfo = PluginPackageManager.GetPackageInfoByUpgradeCode upgradeCode
pkgName = pkgInfo[2]
pkgVersion = pkgInfo[3]
format "% : % : % %\n" upgradeCode n pkgName pkgVersion
for j = 1 to n do
(
env_name; env_value; env_type
PluginPackageManager.GetPackageEnvironmentVariable upgradeCode j &env_name &env_value &env_type
format " env_name: % env_value: % env_type: %\n" env_name env_value env_type
)
)
OUTPUT: A PARTIAL RESULT FROM THE CALL
{10a2f92d-c49b-46c2-834d-702be1dbeb07} : 0 : Retopology Tools for 3ds Max 2026 1.6.0.16
{15c129dd-e05a-49d7-bddc-b5fc3c3f8627} : 0 : Alembic 1.0.0
{26302679-93fd-5bf6-94d9-bc29a7d8892a} : 0 : capholes 1.0.0
{3e09e4b4-c19b-11ed-afa1-0242acc0ffee} : 2 : MAXtoA for 3ds Max 2026 5.8.0.0
env_name: PATH env_value: +./bin env_type: #path
env_name: PXR_PLUGINPATH_NAME env_value: +./usd env_type: #path
{5a23cf1e-099c-47f9-a6bd-40054a082107} : 0 : Autodesk 3ds Max 2026 CivilView 1.0.1.0
{627ec730-ab0b-4d5b-b7c9-5f93e12d577f} : 0 : 3ds Max Scene Security Tools 2.1.8
{81d644ff-83e7-40ed-90e0-5f516f1e075a} : 0 : Advanced Modeling Tools for 3ds Max 2026 1.8.0.1209
{9d0ba523-c083-4db2-a447-7cbea8a2baba} : 0 : RevitImporter 1.0.0
{af671c72-cbe1-5245-a2e5-16a57d4f7075} : 0 : BooleanObject 1.0.0
{f49b0e7a-e88f-4a56-a211-5ed540241744} : 0 : MaxFluids 0.0.1
OK