# Manifest

The manifest file contains information that Saturn needs to load the plugin, all manifest attributes must exist or the plugin will not be loaded.

Here's an example of a plugin manifest.json file:

{% code title="manifest.json" %}
```json
{
  "Slug": "ExamplePlugin",
  "Name": "Example Plugin",
  "Description": "A cool example plugin.",
  "Author": ["John Doe"],
  "Version": {
    "Plugin": "1.0",
    "Saturn": ["1.0.0"]
  },
  "Dependencies": [],
  "Conflicts": [],
  "Hibernate": ["/MyPluginURL"],
  "Startup": ["Main.php"]
}
```
{% endcode %}

## Manifest keys and what they do

### Slug

Your Saturn provided plugin 'slug', this tells Saturn where to look for updates, and to automatically generate a link to your plugin page.

A slug is basically a unique ID for you! It stops plugins from clashing and causing nasty errors, it's also how PluginManager understands what plugin is this plugin.

Even if you change the name of your plugin, you slug won't change. It's permanent.

_There are no examples - use your slug._

### Name

The name key does what it says on the tin, it's the plugin's name!&#x20;

<details>

<summary>Examples</summary>

:white\_check\_mark: **Example**

:white\_check\_mark: **My Cool Plugin!**

:x: **Plugin by John Doe**

Plugins shouldn't contain your name, that's what the author section is for!

:x: **Saturn Plugin**

Plugins shouldn't contain "Saturn", we know it's for Saturn!

</details>

### Description

Another easy one, it's a quick description for your plugin!

<details>

<summary>Examples</summary>

:white\_check\_mark: **This is a cool plugin that does cool stuff**

:x: **A plugin made by John Doe**

Descriptions shouldn't contain your name, that's what the author section is for! The only exception is if you are required to give attribution for using libraries, etc (Libraries made by the Saturn team made for Saturn don't require attribution in plugins).

:x: **A cool plugin for Saturn**

Descriptions shouldn't contain "Saturn", we know it's for Saturn!

</details>

### Author

This can be a single author, or a list. It tells the people using it who made it.

<details>

<summary>Examples</summary>

:white\_check\_mark: **\["John Doe"]**

:white\_check\_mark: **\["John Doe", "Jane Doe"]**

:x: **\["www.johndoe.com"]**

Plugins shouldn't contain URLs, we automatically generate links back to your Saturn Marketplace page in the Plugin Library!

:x: **\["Anonymous"]**

Tell us who you are! Use an Alias, anything!

:x: **"John Doe"**

Please put it in an array, even if it's only one value. I like arrays.

</details>

### Version->Plugin

Your plugin version, that's up to you! It must only consist of numbers and periods. It's used whilst checking for plugin updates.

<details>

<summary>Examples</summary>

:white\_check\_mark: **1**

:white\_check\_mark: **1.2**

:white\_check\_mark: **1.2.3**

:x: **1.2-patch-1**

This will confuse Saturn. Please don't confuse Saturn, it's trying it's best.

</details>

### Version->Saturn

The version(s) of Saturn that your plugin is compatable with.

<details>

<summary>Examples</summary>

:white\_check\_mark: **\["1.0.0"]**

:x: **\["Saturn 1.0.0"]**

This will confuse Saturn. Please don't confuse Saturn, it's trying it's best.

:x: **"1.0.0"**

Please put it in an array, even if it's only one value. _We_ like arrays.

</details>

### Dependencies

Does you plugin rely on another plugin to work? If so, this section is for you! If not, well you need it anyways.

<details>

<summary>Examples: My plugin has dependencies.</summary>

:white\_check\_mark: **\["Example"]**

:white\_check\_mark: **\["Example", "ExampleTwo"]**

:x: **"Example"**

Please put it in an array, even if it's only one value. We love arrays.

</details>

<details>

<summary>Examples: My plugin does not have dependencies.</summary>

:white\_check\_mark: **\[]**

:x: **\["None"]**

Don't say that! Now Saturn is looking all over for a plugin called "None"

</details>

### Conflicts

This section is for if you're aware of your plugin conflicting with another plugin, for example if you create a custom control panel plugin - you don't want users to use any others!

<details>

<summary>Examples: My plugin has conflicts.</summary>

:white\_check\_mark: **\["Example"]**

:white\_check\_mark: **\["Example", "ExampleTwo"]**

:x: **"Example"**

Please put it in an array, even if it's only one value. Saturn loves arrays.

</details>

<details>

<summary>Examples: My plugin does not have conflicts.</summary>

:white\_check\_mark: **\[]**

:x: **\["None"]**

Don't say that! Now Saturn is looking all over for a plugin called "None"

</details>

### Hibernate

Hibernate allows your plugin to only load when specific conditions are met, for more information please see [#hibernate](../power-features#hibernate "mention").

<details>

<summary>Examples: My plugin hibernates.</summary>

:white\_check\_mark: **\["/panel"]**

:white\_check\_mark: **\["/panel", "/account"]**

:x: **"/panel"**

Please put it in an array, even if it's only one value. Everyone loves arrays.

</details>

<details>

<summary>Examples: My plugin does not hibernate.</summary>

:white\_check\_mark: **false**

:x: **\["None"]**

Don't say that! Now Saturn is confused and won't load it until "None" is found!

</details>

### Startup

The files that Saturn should load into the program. These files should have executable PHP outside of a class, Saturn doesn't load classes automatically.

Conventionally, you should only load one file which in turn loads and starts your plugin. But if you want to you can load more, it's up to you really - we don't care.

<details>

<summary><strong>Examples</strong></summary>

:white\_check\_mark: **\["Main.php"]**

:white\_check\_mark: **\["Main.php", "Settings.php"]**

:white\_check\_mark: **\["code/Main.php"]**

Your startup file can be in a subfolder.

:x: **\["Main"]**

You need to add a file extension!

:x: **\[]**

If you load nothing, you plugin won't work.

</details>

