malv install

Download and install apps from the MALV registry. This fetches published apps so you can use them in your project.

Usage

# Install all registry apps from malv.json
malv install

# Install a specific app (latest version)
malv install @malv/gmail

# Install with specific version
malv install @malv/[email protected]

# Install with semver range
malv install @malv/gmail@^1.0.0

# Install multiple apps
malv install @malv/gmail @malv/calendar @acme/tool

Options

Option What It Does
--force, -f Re-download even if version exists locally
--dry-run Show what would be installed without downloading
--verbose, -v Show detailed progress

How It Works

  1. Reads malv.json for apps with semver versions
  2. Checks local cache (malv_systems/) for existing installations
  3. Resolves version ranges to exact versions via the registry
  4. Downloads files with integrity verification
  5. Updates malv.lock with resolved versions

Version Formats

Format Example What It Installs
Exact 1.2.3 Exactly version 1.2.3
Caret ^1.2.0 Latest compatible (>=1.2.0 <2.0.0)
Tilde ~1.2.0 Latest patch (>=1.2.0 <1.3.0)
Latest latest Most recent published version
Range >=1.0.0 <2.0.0 Latest within range

Output

$ malv install

Resolving versions...
  @malv/gmail ^1.0.0 → 1.2.3
  @malv/calendar ^2.0.0 → 2.1.0

Downloading...
  ✓ @malv/[email protected] (15 files, 24.5 KB)
  ✓ @malv/[email protected] (12 files, 18.2 KB)

✓ Installed 2 apps

The Lock File

Installation creates or updates malv.lock:

{
  "lockfileVersion": 1,
  "generatedAt": 1703000000000,
  "systems": {
    "@malv/gmail": {
      "version": "1.2.3",
      "resolved": "https://registry.malv.ai/...",
      "integrity": "sha256-...",
      "files": {
        "package.json": "sha256-...",
        "tools.json": "sha256-..."
      }
    }
  }
}

The lock file ensures reproducible installs. Commit it to version control.

Installation Location

Apps are downloaded to malv_systems/:

malv_systems/
├── @malv-gmail/           # @malv/gmail (slash → dash)
│   ├── package.json
│   ├── tools.json
│   └── dist/
└── @malv-calendar/
    └── ...

Workspace Integration

Add malv_systems/ to your package.json workspaces to install dependencies:

{
  "workspaces": ["packages/*", "malv_systems/*"]
}

Then run yarn install after malv install to install each app's dependencies.

Private Apps

Private apps require authentication:

# Log in first
malv login

# Then install
malv install @my-org/private-app

You must be a member of the organization that owns the app.

Dry Run

Preview what would be installed:

$ malv install --dry-run

Would install:
  @malv/gmail ^1.0.0 → 1.2.3
  @malv/calendar ^2.0.0 → 2.1.0 (already cached)

No changes made.

Force Reinstall

Re-download apps even if they're cached:

malv install --force

Useful when you suspect a corrupted download or want to verify integrity.

Common Issues

Version not found

Error: Version 1.0.0 of @malv/gmail not found

Check that the version exists in the registry. Use latest or a semver range.

Network error

Error: Failed to fetch @malv/gmail

Check your internet connection. The registry may be temporarily unavailable.

Permission denied

Error: You don't have access to @my-org/private-app

Log in with malv login and ensure you're a member of the organization.

Related Commands