# CLI Reference The Mosis CLI (`mosis`) is a command-line tool for building, testing, and publishing Mosis apps. ## Installation ### Windows Download the installer from your [Developer Dashboard](/dashboard) or use: ```powershell # Using winget winget install omixlab.mosis-cli # Or download directly curl -o mosis-cli.exe https://dl.omixlab.com/cli/windows/mosis.exe ``` ### macOS ```bash # Using Homebrew brew install omixlab/tap/mosis-cli # Or download directly curl -fsSL https://dl.omixlab.com/cli/macos/mosis > /usr/local/bin/mosis chmod +x /usr/local/bin/mosis ``` ### Linux ```bash # Download binary curl -fsSL https://dl.omixlab.com/cli/linux/mosis > ~/.local/bin/mosis chmod +x ~/.local/bin/mosis # Or using snap sudo snap install mosis-cli ``` ## Quick Start ```bash # Create a new project mosis init myapp # Build the package cd myapp mosis build # Test locally mosis run # Login and publish mosis login mosis publish ``` ## Commands ### mosis init Create a new Mosis app project. ```bash mosis init [options] ``` **Arguments:** - `name` - Project name (creates directory) **Options:** | Option | Description | |--------|-------------| | `--template ` | Use a starter template | | `--package-id ` | Set package ID | | `--no-git` | Don't initialize git repo | **Templates:** - `default` - Basic app structure - `minimal` - Bare minimum files - `navigation` - Multi-screen with navigation - `form` - Form handling example - `list` - Scrollable list example **Example:** ```bash mosis init myapp --template navigation --package-id com.example.myapp ``` **Output:** ``` myapp/ ├── manifest.json ├── icon.png ├── assets/ │ ├── main.rml │ └── styles.rcss └── .mosis/ └── config.json ``` --- ### mosis build Build a `.mosis` package from your project. ```bash mosis build [options] ``` **Options:** | Option | Description | |--------|-------------| | `-o, --output ` | Output file path | | `--no-sign` | Skip signing (dev only) | | `--verbose` | Show detailed output | | `--validate-only` | Validate without building | **Example:** ```bash mosis build -o dist/myapp.mosis ``` **Build Process:** 1. Validates manifest.json 2. Checks all referenced files exist 3. Validates RML/RCSS syntax 4. Creates compressed package 5. Signs with developer key (if available) --- ### mosis validate Validate your project without building. ```bash mosis validate [options] ``` **Options:** | Option | Description | |--------|-------------| | `--strict` | Enable strict validation | | `--fix` | Auto-fix simple issues | **Checks performed:** - Manifest schema validation - Required files existence - Icon sizes and formats - RML/RCSS syntax - Lua syntax - Package size limits **Example output:** ``` ✓ manifest.json is valid ✓ All required icons present ✓ Entry point exists: assets/main.rml ✓ RML syntax valid (3 files) ✓ RCSS syntax valid (2 files) ✓ Lua syntax valid (1 file) ✓ Package size: 45KB (under 10MB limit) Validation passed! ``` --- ### mosis run Run your app in the local designer for testing. ```bash mosis run [options] ``` **Options:** | Option | Description | |--------|-------------| | `--device ` | Target device profile | | `--scale ` | Window scale factor | | `--hot-reload` | Enable hot reload (default) | | `--no-hot-reload` | Disable hot reload | **Device profiles:** - `phone` - Standard phone (1080x1920) - `tablet` - Tablet (1200x1920) - `watch` - Watch (360x360) **Example:** ```bash mosis run --device phone --scale 0.5 ``` --- ### mosis login Authenticate with the developer portal. ```bash mosis login [options] ``` **Options:** | Option | Description | |--------|-------------| | `--token ` | Use API token directly | | `--browser` | Open browser for OAuth | **Interactive login:** ```bash $ mosis login Opening browser for authentication... ✓ Logged in as developer@example.com ``` **Token login (for CI/CD):** ```bash mosis login --token YOUR_API_TOKEN ``` --- ### mosis logout Log out of the developer portal. ```bash mosis logout ``` --- ### mosis publish Upload and submit your app for review. ```bash mosis publish [options] ``` **Options:** | Option | Description | |--------|-------------| | `--notes ` | Release notes | | `--notes-file ` | Release notes from file | | `--draft` | Upload as draft (don't submit) | | `--track ` | Release track (production/beta) | **Example:** ```bash mosis publish --notes "Bug fixes and performance improvements" ``` **Process:** 1. Builds package (if needed) 2. Uploads to portal 3. Runs automated validation 4. Submits for review (unless `--draft`) --- ### mosis status Check the status of your app submissions. ```bash mosis status [app-id] ``` **Example output:** ``` com.example.myapp Latest Version: 1.2.0 (code: 5) Status: In Review Submitted: 2 hours ago Previous Versions: 1.1.0 (4) - Published 1.0.0 (1) - Published ``` --- ### mosis keys Manage signing keys. ```bash mosis keys ``` **Subcommands:** #### keys generate Generate a new signing keypair. ```bash mosis keys generate [options] ``` | Option | Description | |--------|-------------| | `-o, --output ` | Output directory | | `--name ` | Key name | ```bash $ mosis keys generate --name production Generated keypair: Private: ~/.mosis/keys/production.key Public: ~/.mosis/keys/production.pub Keep your private key secure! Never share it. ``` #### keys register Upload your public key to the portal. ```bash mosis keys register ``` ```bash $ mosis keys register ~/.mosis/keys/production.pub ✓ Key registered successfully Key ID: k_abc123xyz Algorithm: Ed25519 ``` #### keys list List registered keys. ```bash $ mosis keys list ID Name Created Status k_abc123xyz production 2024-01-15 Active k_def456uvw development 2024-01-10 Active ``` #### keys revoke Revoke a registered key. ```bash mosis keys revoke ``` --- ### mosis config Manage CLI configuration. ```bash mosis config ``` **Subcommands:** #### config get Get a configuration value. ```bash mosis config get ``` #### config set Set a configuration value. ```bash mosis config set ``` #### config list List all configuration. ```bash $ mosis config list api_url = https://api.omixlab.com designer_path = /usr/local/bin/mosis-designer default_key = production ``` **Configuration keys:** | Key | Description | Default | |-----|-------------|---------| | `api_url` | API endpoint | https://api.omixlab.com | | `designer_path` | Path to designer | (auto-detected) | | `default_key` | Default signing key | (none) | | `auto_build` | Build before publish | true | --- ### mosis doctor Diagnose common issues with your setup. ```bash $ mosis doctor Checking Mosis CLI installation... ✓ CLI version: 1.2.0 ✓ Designer found: /usr/local/bin/mosis-designer ✓ Authenticated as: developer@example.com ✓ Signing key configured: production ✓ Network connectivity OK All checks passed! ``` --- ### mosis version Show CLI version information. ```bash $ mosis version mosis-cli version 1.2.0 Built: 2024-01-15 Go: 1.21.5 ``` --- ### mosis help Show help for any command. ```bash mosis help [command] mosis --help ``` ## Environment Variables | Variable | Description | |----------|-------------| | `MOSIS_API_URL` | Override API endpoint | | `MOSIS_TOKEN` | API token for authentication | | `MOSIS_KEY_PATH` | Path to signing key | | `MOSIS_NO_COLOR` | Disable colored output | | `MOSIS_DEBUG` | Enable debug logging | ## Configuration Files ### Global Config Location: `~/.mosis/config.json` ```json { "api_url": "https://api.omixlab.com", "default_key": "production", "auto_build": true } ``` ### Project Config Location: `.mosis/config.json` (in project root) ```json { "signing_key": "production", "build_output": "dist/" } ``` ## Exit Codes | Code | Meaning | |------|---------| | 0 | Success | | 1 | General error | | 2 | Invalid arguments | | 3 | Authentication required | | 4 | Validation failed | | 5 | Network error | | 6 | Build failed | ## CI/CD Integration ### GitHub Actions ```yaml name: Publish Mosis App on: push: tags: ['v*'] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Mosis CLI run: | curl -fsSL https://dl.omixlab.com/cli/linux/mosis > mosis chmod +x mosis sudo mv mosis /usr/local/bin/ - name: Build and Publish env: MOSIS_TOKEN: ${{ secrets.MOSIS_TOKEN }} run: | mosis build mosis publish --notes "Release ${GITHUB_REF#refs/tags/}" ``` ### GitLab CI ```yaml publish: image: ubuntu:latest script: - curl -fsSL https://dl.omixlab.com/cli/linux/mosis > /usr/local/bin/mosis - chmod +x /usr/local/bin/mosis - mosis build - mosis publish --notes "Release $CI_COMMIT_TAG" only: - tags variables: MOSIS_TOKEN: $MOSIS_TOKEN ``` ## Troubleshooting ### "Command not found" Ensure the CLI is in your PATH: ```bash echo $PATH which mosis ``` ### "Authentication failed" Re-login: ```bash mosis logout mosis login ``` ### "Build failed: Invalid manifest" Run validation for details: ```bash mosis validate --strict ``` ### "Network error" Check connectivity: ```bash mosis doctor curl -I https://api.omixlab.com/health ``` ## See Also - [Getting Started](getting-started.md) - First app tutorial - [Publishing Guide](guides/publishing.md) - Submission tips - [API Reference](api/lua-api.md) - Lua API documentation