Rainmeter's basic purpose is to run skins. A skin is a movable, dynamic, sometimes-interactive window that appears over the Windows desktop, and usually gathers and displays information of some kind.
Skins come with many different sizes, styles, user interfaces, and levels of complexity. Rainmeter includes utilities for publishing and installing 3rd-party skins. Each skin is generally stored and loaded as an independent, self-contained module.
Files and Folders
All skins are stored in Rainmeter's "Skins" folder. If Rainmeter has been installed normally, the default location of the Skins folder is:
A skin is stored as a file called "SkinName.ini" in its own folder within Skins, as in:
Rainmeter\Skins\SkinName\SkinName.ini.1 (The file and folder names do not need to match.)
All of these folder paths may be referenced in a skin as built-in-variables.
1. "YourName" and "SkinName" are examples.
If one folder contains multiple
SkinName.ini1 files, they are each considered variants of the same skin. This means that only one variant can be active at a time, and all variants use the same settings. Separate skins must be stored in separate folders.
1. "YourName" and "SkinName" are examples.
Any supporting files used by the skin, such as images, addon executables, sounds, or Lua scripts, should also be stored in the skin folder. Complex skins are recommended to store supporting files in a folder called @Resources inside the root config folder. The @Resources folder is ignored by Rainmeter, except to load custom fonts and custom cursors.
Each skin is identified with a certain config name. The config name is based on the path from the main Skins folder to the skin file. For example, if a skin is located at...
...then the config name would be:
Because skins may have any number of variants, many Rainmeter features—especially bangs—refer to a specific skin by its config name, rather than the skin's filename.
Skins may also be stored in subfolders within the same root config folder. They share the same @Resources folder, and are packaged and installed together. Otherwise, Rainmeter treats each subfolder as a separate config.
For example, the following skins belong to the "illustro" suite:
This means that they are both located in the same root config folder, "illustro," in the main Skins directory.
Each skin has a unique config name:
But since they belong to the same root config, they share the same @Resources folder:
A suite is an informal term for skins that are organized together in this manner. Suites are often used by skin authors to make a set of skins that share a common style, or complement each other in some way. If a root config folder contains only one
SkinName.ini file, then the config and root config are the same, and the skin can be stored, packaged and installed by itself.
SkinName.ini file is written as a standard INI file, which uses the following1 format:
Each property of the skin is defined by a section. Each key is an option that modifies that property. The following sections may be used in skins:
Defines options that affect the entire skin.
Defines text strings that can be used throughout the skin.
Objects that retrieve (or "measure") information of some kind.
Objects that display information and other visual elements.
Define options that may be used by several meters.
Defines the name, version, license, and other non-functional information about the skin.
A skin must have at least one meter. All other properties are optional, and may not even be present, depending on what is needed for the skin. For skins that are publicly distributed, the [Metadata] section is strongly recommended.
There are only a few rules about using the INI format:
- All section names in a skin must be unique.
- All option names within a section must be unique.
- Section and option names should include alphanumeric characters only (no spaces or punctuation).
- Option values may be contained by quotes (
"). If so, Rainmeter will ignore the containing quotes.
- Option values must be kept on a single line.
1. "Section," "Key" and "Value" are examples.
When a skin is loaded, it updates on a regular cycle. The length of time between updates is defined by the Update option in the [Rainmeter] section, and defaults to 1 second (or 1000 milliseconds). The update determines when the skin reacts to changes in the values of variables, measures and options.
Individual meters and measures can be made to update more slowly by "skipping" cycles, using the UpdateDivider option. In addition, the !Update bang forces the skin to update immediately, resetting the timed cycle.
When a skin refreshes, all values are reset, and the skin starts over as if it had just been loaded for the first time. Refreshing also applies any changes that have been made to the code in