6.6 KiB
Manifest Reference
Every Mosis app requires a manifest.json file in the root of the package. This file describes your app and its requirements.
Complete Schema
{
"id": "com.example.myapp",
"name": "My App",
"version": "1.0.0",
"version_code": 1,
"entry": "assets/main.rml",
"permissions": [],
"min_mosis_version": "1.0.0",
"author": {
"name": "Developer Name",
"email": "dev@example.com",
"url": "https://example.com"
},
"icons": {
"32": "icons/icon-32.png",
"64": "icons/icon-64.png",
"128": "icons/icon-128.png"
},
"description": "A short description of your app",
"category": "utilities",
"screenshots": [
"screenshots/1.png",
"screenshots/2.png"
],
"locales": {
"default": "en",
"supported": ["en", "es", "fr"]
}
}
Required Fields
id
Type: string
Unique package identifier in reverse domain notation. Must match the ID registered in the developer portal.
"id": "com.yourcompany.appname"
Rules:
- Lowercase letters, numbers, and periods only
- Must have at least two segments (e.g.,
com.app) - Maximum 255 characters
- Cannot start or end with a period
name
Type: string
Display name shown to users. Maximum 50 characters.
"name": "My Awesome App"
version
Type: string
Human-readable version string following semantic versioning (MAJOR.MINOR.PATCH).
"version": "1.0.0"
"version": "2.1.3-beta"
version_code
Type: integer
Numeric version code that must increase with each release. Used to determine if an update is available.
"version_code": 1
Rules:
- Must be a positive integer
- Must be greater than all previously published versions
- Maximum value: 2147483647
entry
Type: string
Path to the main RML file, relative to package root.
"entry": "assets/main.rml"
author
Type: object
Information about the app developer.
"author": {
"name": "Developer Name",
"email": "dev@example.com",
"url": "https://example.com"
}
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Developer or company name |
email |
string | Yes | Contact email |
url |
string | No | Website URL |
icons
Type: object
App icons at various sizes. At minimum, provide a 128px icon.
"icons": {
"32": "icons/icon-32.png",
"64": "icons/icon-64.png",
"128": "icons/icon-128.png"
}
Supported sizes: 32, 64, 128, 256, 512
Requirements:
- PNG format recommended
- Square aspect ratio
- No transparency on edges (for proper display)
Optional Fields
description
Type: string
Short description shown in app listings. Maximum 200 characters.
"description": "A simple calculator for everyday math."
permissions
Type: array<string>
List of permissions your app requires. Apps cannot access restricted features without declaring permissions.
"permissions": ["storage", "network"]
See Permissions below.
min_mosis_version
Type: string
Minimum Mosis version required to run this app.
"min_mosis_version": "1.0.0"
If omitted, defaults to "1.0.0".
category
Type: string
App store category for discovery.
"category": "productivity"
Valid categories:
gamesentertainmentproductivityutilitiessocialcommunicationlifestyleeducationhealthfinancenewsother
screenshots
Type: array<string>
Paths to screenshot images for app store listing.
"screenshots": [
"screenshots/home.png",
"screenshots/settings.png",
"screenshots/detail.png"
]
Requirements:
- PNG format
- 1080x1920 (9:16 portrait) recommended
- Maximum 5 screenshots
locales
Type: object
Internationalization configuration.
"locales": {
"default": "en",
"supported": ["en", "es", "fr", "de", "ja"]
}
| Field | Type | Description |
|---|---|---|
default |
string | Default locale code |
supported |
array | List of supported locale codes |
Locale files should be placed in locales/{code}.json.
Permissions Reference
| Permission | Description | Example Use |
|---|---|---|
storage |
Persist data locally | Save user preferences |
network |
Make HTTP requests | Fetch remote data |
clipboard |
Read/write clipboard | Copy text |
notifications |
Show notifications | Reminders |
camera |
Access device camera | Photo capture |
location |
Get device location | Maps, weather |
contacts |
Read contacts | Contact picker |
microphone |
Record audio | Voice notes |
Permission Declaration
"permissions": [
"storage",
"network"
]
Users are informed of permissions before installing. Request only what you need.
Validation
The package builder validates your manifest. Common errors:
| Error | Cause | Solution |
|---|---|---|
Invalid package ID |
ID doesn't match pattern | Use com.company.app format |
Missing required field |
Required field omitted | Add the field |
Invalid version_code |
Not a positive integer | Use positive number |
Icon not found |
Icon path doesn't exist | Check file paths |
Invalid permission |
Unknown permission | Use valid permission name |
Example: Minimal Manifest
{
"id": "com.example.hello",
"name": "Hello World",
"version": "1.0.0",
"version_code": 1,
"entry": "main.rml",
"author": {
"name": "Developer",
"email": "dev@example.com"
},
"icons": {
"128": "icon.png"
}
}
Example: Full Manifest
{
"id": "com.acme.calculator",
"name": "ACME Calculator",
"version": "2.1.0",
"version_code": 5,
"entry": "assets/main.rml",
"description": "A powerful calculator with scientific functions.",
"category": "utilities",
"permissions": [
"storage",
"clipboard"
],
"min_mosis_version": "1.2.0",
"author": {
"name": "ACME Corp",
"email": "apps@acme.com",
"url": "https://acme.com"
},
"icons": {
"32": "icons/icon-32.png",
"64": "icons/icon-64.png",
"128": "icons/icon-128.png",
"256": "icons/icon-256.png"
},
"screenshots": [
"screenshots/basic.png",
"screenshots/scientific.png",
"screenshots/history.png"
],
"locales": {
"default": "en",
"supported": ["en", "es", "fr", "de"]
}
}
Next Steps
- Getting Started - Create your first app
- Permissions Guide - Understanding permissions
- Publishing Guide - Submit your app