Info.plist Structure
Every plug-in bundle must contain a Contents/Info.plist file using Apple’s
property-list XML format. This file tells Plex Media Server how to load and
classify the plug-in.
Minimal Example
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.example.myplugin</string>
<key>PlexPluginClass</key>
<string>Agent</string>
<key>PlexFrameworkVersion</key>
<string>2</string>
</dict>
</plist>
Info.plist Keys Reference
Key |
Type |
Description |
|---|---|---|
|
string |
Required. A globally unique reverse-DNS identifier for the plug-in
(e.g. |
|
string |
The plug-in’s class. Determines what the plug-in can do. See
PlexPluginClass values below.
Common values: |
|
string |
The framework bootstrap version to use. Should always be |
|
string |
Comma-separated list of client platforms that can access this plug-in,
or |
|
string |
Comma-separated media type IDs this plug-in supports. See Media type IDs below. |
|
string |
Security policy for the plug-in sandbox.
|
|
array |
List of API kit names to exclude from the sandbox. For example,
|
|
array |
List of additional Python module names that can be imported. Only
effective when |
|
string |
Version number of the plug-in bundle. |
PlexPluginClass Values
Value |
Description |
|---|---|
|
A metadata agent plug-in. Provides search() and update() methods to fetch metadata for library items. |
|
A resource plug-in that provides services (URL Services, Search Services, Related Content Services) or shared code. Does not appear in the user interface directly. |
Note
The official documentation listed Content as a valid value for channel
plug-ins, but in practice most channel plug-ins omit PlexPluginClass
entirely or use Resource.
PlexMediaTypes
ID |
Media Type |
|---|---|
1 |
Movie |
2 |
TV Show |
8 |
Artist (Music) |
9 |
Album (Music) |
13 |
Photo |
Service Keys
Services can be declared in Info.plist using the old-style plist keys
below, or in a separate ServiceInfo.plist file using the new-style
format. See Channel Plugins for full details on both approaches.
Key |
Description |
|---|---|
|
Dict of URL services. Each entry maps a service name to a dict with
|
|
Dict of search services. Each entry maps a service name to a dict
with |
|
Dict of related content services. Each entry maps a service name to a
dict with |
Old-style URL service example:
<key>PlexURLServices</key>
<dict>
<key>YouTube</key>
<dict>
<key>Identifier</key>
<string>com.plexapp.plugins.youtube</string>
<key>URLPatterns</key>
<array>
<string>http://.*youtube\.com/(watch)?\?v=</string>
</array>
<key>TestURLs</key>
<array>
<string>http://youtube.com/watch?v=vzKbhxY1eQU</string>
</array>
</dict>
</dict>
Full Agent Example
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.plexapp.agents.mymovieagent</string>
<key>PlexPluginClass</key>
<string>Agent</string>
<key>PlexClientPlatforms</key>
<string>*</string>
<key>PlexMediaTypes</key>
<string>1</string>
<key>PlexFrameworkVersion</key>
<string>2</string>
<key>PlexBundleVersion</key>
<string>1.0.0</string>
</dict>
</plist>
Full Service Bundle Example
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.plexapp.plugins.myservice</string>
<key>PlexPluginClass</key>
<string>Resource</string>
<key>PlexFrameworkVersion</key>
<string>2</string>
<key>PlexURLServices</key>
<dict>
<key>MyService</key>
<dict>
<key>Identifier</key>
<string>com.plexapp.plugins.myservice</string>
<key>URLPatterns</key>
<array>
<string>https?://.*example\.com/video/</string>
</array>
</dict>
</dict>
<key>PlexSearchServices</key>
<dict>
<key>MySearch</key>
<dict>
<key>Identifier</key>
<string>com.plexapp.plugins.myservice</string>
</dict>
</dict>
</dict>
</plist>