<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.simtx.net/index.php?action=history&amp;feed=atom&amp;title=Lua_extension_manifest</id>
	<title>Lua extension manifest - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.simtx.net/index.php?action=history&amp;feed=atom&amp;title=Lua_extension_manifest"/>
	<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=Lua_extension_manifest&amp;action=history"/>
	<updated>2026-08-06T11:41:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.simtx.net/index.php?title=Lua_extension_manifest&amp;diff=566&amp;oldid=prev</id>
		<title>Clanker: Add and update user documentation for Lua extensions and the catalog</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=Lua_extension_manifest&amp;diff=566&amp;oldid=prev"/>
		<updated>2026-08-06T09:12:24Z</updated>

		<summary type="html">&lt;p&gt;Add and update user documentation for Lua extensions and the catalog&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Every Lua extension package contains an &amp;lt;code&amp;gt;extension.properties&amp;lt;/code&amp;gt; file. The manifest identifies the package, states its compatibility, and declares the types that the entry file provides.&lt;br /&gt;
&lt;br /&gt;
== Fields ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Required !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || Yes || Stable lowercase package identifier. It must contain at least one separator and may use letters, digits, periods, underscores, and hyphens, for example &amp;lt;code&amp;gt;net.example.my-addon&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || Yes || Display name, at most 80 characters.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; || Yes || Package version in semantic versioning form, such as &amp;lt;code&amp;gt;1.2.0&amp;lt;/code&amp;gt;, optionally with prerelease or build information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;api&amp;lt;/code&amp;gt; || Yes || Required SimTX Lua API version. The current version is &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;entry&amp;lt;/code&amp;gt; || No || Relative path of the entry Lua file. The default is &amp;lt;code&amp;gt;init.lua&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;types&amp;lt;/code&amp;gt; || Yes || Comma-separated list of &amp;lt;code&amp;gt;modulation&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;audio-addon&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;theme&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;library&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; || No || Package description, at most 300 characters.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dependencies&amp;lt;/code&amp;gt; || No || Comma-separated package requirements in &amp;lt;code&amp;gt;package.id@version-range&amp;lt;/code&amp;gt; form.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;exports&amp;lt;/code&amp;gt; || For libraries || Comma-separated Lua module names made available to dependent packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unknown fields are rejected. The entry path must stay within the package and end in &amp;lt;code&amp;gt;.lua&amp;lt;/code&amp;gt;. The declared types must exactly match the types registered by the entry file, apart from &amp;lt;code&amp;gt;library&amp;lt;/code&amp;gt;, which represents exported modules rather than a registration.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
id=net.example.voice-tools&lt;br /&gt;
name=Voice Tools&lt;br /&gt;
version=1.3.0&lt;br /&gt;
api=1&lt;br /&gt;
entry=init.lua&lt;br /&gt;
types=audio-addon,library&lt;br /&gt;
description=Audio processing tools and a reusable level module.&lt;br /&gt;
dependencies=org.example.filters@^2.1.0&lt;br /&gt;
exports=level,codec.tone&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exported names correspond to &amp;lt;code&amp;gt;level.lua&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;codec/tone.lua&amp;lt;/code&amp;gt;. A package with the &amp;lt;code&amp;gt;library&amp;lt;/code&amp;gt; type must export at least one module. A package without that type cannot declare exports.&lt;br /&gt;
&lt;br /&gt;
== Version ranges ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Form !! Meaning for version 1.2.3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; || Any installed version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;1.2.3&amp;lt;/code&amp;gt; || Exactly 1.2.3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;gt;=1.2.3&amp;lt;/code&amp;gt; || 1.2.3 or later&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;~1.2.3&amp;lt;/code&amp;gt; || At least 1.2.3 but earlier than 1.3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;^1.2.3&amp;lt;/code&amp;gt; || At least 1.2.3 but earlier than 2.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For a zero-major version, a caret range ends at the next nonzero component. For example, &amp;lt;code&amp;gt;^0.2.3&amp;lt;/code&amp;gt; accepts versions below 0.3.0, while &amp;lt;code&amp;gt;^0.0.3&amp;lt;/code&amp;gt; accepts versions below 0.0.4.&lt;br /&gt;
&lt;br /&gt;
== Modules and dependencies ==&lt;br /&gt;
A package loads one of its own modules with a plain module name:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local tone = require(&amp;quot;codec.tone&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A module exported by a declared dependency uses &amp;lt;code&amp;gt;package.id:module&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local level = require(&amp;quot;org.example.filters:level&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cross-package loading succeeds only when the dependency is declared, the installed version satisfies the range, and the other package exports the requested module. Dependency cycles are rejected. The [[Extension catalog]] offers to install missing catalog dependencies before the selected package.&lt;br /&gt;
&lt;br /&gt;
[[Category:Lua extensions]]&lt;/div&gt;</summary>
		<author><name>Clanker</name></author>
	</entry>
</feed>