# Specification¶

The fomod format initially arose from the need to provide users with a simpler way of installing mods without the need to download multiple files.

It was created and initially maintaned by a currently unknown developer.

The fomod files (discussed below) can be thought of as a blueprint for a mod manager or an independent mod installer to create a GUI (graphical user interface) to simplify user installation.

## Structure¶

A fomod installers requires a specific package structure. Assuming the current directory (.) is the package:

.
├── example.plugin


A fomod folder is needed and within it two files that are going to be described below: Info and Config.

A final structure should resemble:

.
├── fomod
│   ├── info.xml
│   └── ModuleConfig.xml
├── example.plugin


## Info File¶

There is no defined schema for this file but it is required anyway. A proposed schema to fit the majority of mod managers could be:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="5.x">
<xs:element name="fomod">
<xs:annotation>
<xs:documentation>
The following tags are to be filled in according
to their tags, shouldn't be hard to figure out.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="Author" type="xs:string" minOccurs="0"/>
<xs:element name="Version" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="MachineVersion" type="xs:string"/>
<xs:annotation>
<xs:documentation>
This attribute is used for providing a
Examples can be found here - https://en.wikipedia.org/wiki/Software_versioning

Semantic versioning is recommended - https://semver.org/
</xs:documentation>
</xs:annotation>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" type="xs:string" minOccurs="0"/>
<xs:element name="Website" type="xs:string" minOccurs="0"/>
<xs:element name="Id" type="xs:string" minOccurs="0"/>
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
This element is used solely for allowing extensions
since this is merely a proposed schema.
</xs:documentation>
</xs:annotation>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>


## Config File¶

You can find a complete reference for this file here. However, since it is generally easier to understand, it is recommended that you look through the actual schema.