Plugin manifest
manifest.json is required at the .splug root.
Fields
| Field | Required | Description |
|---|---|---|
schemaVersion | Yes | Package schema. Plugin API 1.0 requires 1. |
id | Yes | Stable reverse-domain identifier, for example com.example.speedometer. |
name | Yes | User-facing name. |
version | Yes | Semantic numeric version such as 1.0.0. |
apiVersion | Yes | Exact 1.0 or compatible range ^1.0. |
entry | Yes | Safe relative path to a .lua entry file. |
description | No | User-facing description. |
activationMode | No | immediate or restart-required; defaults to the latter. |
permissions | No | Unique public permission names. |
contexts | No | singleplayer, multiplayer, or omitted for both. |
author | No | Object containing an author name. |
Identifier rules
An ID starts with a lowercase letter and contains at least two dot-separated components. Components may use lowercase letters, digits, _, and - where allowed.
Choose the ID once. Changing it creates a different plugin with separate permissions, versions, and storage.
API compatibility
"apiVersion": "1.0"requests exactly API 1.0."apiVersion": "^1.0"accepts API 1.x where the current minor version is at least 0.
Do not declare capabilities that you have not tested. Use samp.api.has() when a plugin can optionally use a capability added within a compatible API line.
Complete example
json
{
"schemaVersion": 1,
"id": "com.example.hello",
"name": "Hello Plugin",
"version": "1.0.0",
"apiVersion": "^1.0",
"entry": "main.lua",
"description": "A minimal SA-MP Android plugin.",
"activationMode": "immediate",
"permissions": [],
"contexts": ["multiplayer"],
"author": {
"name": "Your Name"
}
}