npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@malv/cli

v1.2.0

Published

Development tooling for MALV

Readme

@malv/cli

Command-line interface for MALV projects. Provides commands for development, environment configuration, validation, log viewing, and registry authentication.

Commands

malv create

Scaffolds a new MALV project with best practices built-in.

malv create [project-name]

What It Does:

  1. Prompts for project name and location (or uses provided name)
  2. Scaffolds project from templates (monorepo root, website, example app)
  3. Optionally installs dependencies
  4. Shows next steps

Usage:

# Interactive mode
malv create

# With project name
malv create my-project

After Scaffolding:

cd my-project
yarn install        # if not done during setup
yarn dev:website --project my-project

This will:

  • Authenticate you with Google OAuth
  • Create/select your website
  • Let you manage installed apps
  • Start the development server

Note: This command uses npx create-malv under the hood. You can also run npm create malv@latest or yarn create malv directly.


malv dev

Starts the development server for all apps and web projects in malv.json.

malv dev [--verbose|-v] [--cloudflare]

Options:

  • --verbose, -v - Show detailed output from all processes
  • --cloudflare - Use Cloudflare Workers runtime instead of Node.js (requires Wrangler)

Runtime Modes:

By default, malv dev runs apps using Node.js, which requires no additional setup. If you need Cloudflare-specific features (like the AI binding), use the --cloudflare flag to run apps with Wrangler.

# Default: Node.js runtime (no Wrangler needed)
malv dev

# Cloudflare Workers runtime (requires wrangler login)
malv dev --cloudflare

Flow:

  1. Checks that all registry apps (semver versions) are downloaded to malv_systems/
  2. Validates environment configuration for each app against its environment.json
  3. Allocates ports dynamically for each app
  4. Starts malv-dev for each app with its .env file
  5. Starts Vite dev server for each web project (from config.web)
  6. Displays live service status with health monitoring

Environment Injection for Web Projects:

  • VITE_MALV_APPS_URL - Apps CDN URL (http://localhost:59459/apps)
  • VITE_MALV_STORAGE_URL - Storage service URL
  • APP_<APP_NAME> / VITE_APP_<APP_NAME> - URL for each running app

malv env

Interactive environment variable configuration.

malv env [app-name] [--production|-p] [--status|-s]

Options:

  • --production, -p - Configure production environment (default: dev)
  • --status, -s - Show detailed status of all variables
  • app-name - Configure a specific app directly (e.g., malv env @malv/auth)

Examples:

malv env                    # Interactive mode for dev
malv env --production       # Interactive mode for production
malv env --status           # Show all vars and their status
malv env @malv/gmail        # Configure specific app
malv env @malv/gmail -p     # Configure specific app for production

malv ai

Manage AI API key for info summary generation and semantic search.

malv ai <command> [api-key]

Commands:

  • set <api-key> - Store an API key (auto-detects OpenAI or Anthropic)
  • check - Check if a key is configured (alias: status)
  • remove - Remove the stored API key (aliases: rm, delete)

Provider Detection: The command automatically detects the provider based on key format:

  • Keys starting with sk-ant- → Anthropic
  • Other keys → OpenAI

Environment Variable Alternative:

  • MALV_AI_API_KEY - Can be used instead of malv ai set
  • Environment variable takes precedence over config file

Examples:

malv ai set sk-...          # Store OpenAI API key
malv ai set sk-ant-...      # Store Anthropic API key
malv ai check               # Check current key status
malv ai remove              # Remove stored API key

Use Case: The AI API key is used for generating summaries of /info files in apps. When an app contains static reference data (CSVs, JSONs), the summary generator uses this key to create semantic descriptions that enable AI-powered data discovery.


malv logs

Unified log viewer for all running MALV dev workers.

malv logs

Features:

  • Tails the shared log file (~/.malv/dev-logs.jsonl)
  • Groups tool executions with their results
  • Color-codes different apps
  • Interactive controls:
    • c - Clear logs
    • t - Toggle line truncation
    • Ctrl+C - Exit

malv logs-html

Generate HTML from logs and copy to clipboard for sharing.

malv logs-html [--infra|-i]

Options:

  • --infra, -i - Generate HTML from infrastructure server logs instead of app worker logs

Features:

  • Reads the log file (~/.malv/dev-logs.jsonl or ~/.malv/infra-logs.jsonl)
  • Generates styled HTML with syntax highlighting
  • Groups tool executions with their results
  • Color-codes different apps/services
  • Copies directly to system clipboard

Output:

$ malv logs-html

✓ Read 245 log entries
✓ Parsed 245 log entries
✓ Generated HTML (18.5 KB)
✓ HTML copied to clipboard

malv logs-open

Open the log file location in Finder/Explorer.

malv logs-open [--infra|-i]

Options:

  • --infra, -i - Open infrastructure logs location instead of app worker logs

Behavior:

  • macOS: Reveals file in Finder using open -R
  • Windows: Opens Explorer with file selected
  • Linux: Opens parent directory with xdg-open

malv build

Builds MALV apps/systems with rollup and generates type declarations.

malv build [target] [options]

Targets:

  • core - Build app core (Rollup + TypeScript declarations) - default
  • node - Build standalone Node.js server for deployment

Options:

  • --filter=<app> - Build/include specific app(s) - can be specified multiple times
  • --all - Build all workspace apps from malv.json
  • --skip-gen - Skip generation step (types, exports, tools)
  • --output=<dir> - Output directory for node build (default: dist)
  • --resolve, -r - Resolve workspace:* dependencies to actual versions (node target)
  • --force - Skip npm verification for resolved dependencies (node target)
  • --include-infrastructure - Embed infrastructure services for self-contained deployment (Mode 3)
  • --help, -h - Show help

Usage (core target):

# From within an app directory - builds that app
cd packages/malv-apps/auth
malv build

# From project root - builds all workspace:* apps
malv build --all

# Build a specific app by name
malv build --filter=@malv/auth

# Skip generation (useful for quick rebuilds)
malv build --skip-gen

Usage (node target):

# Single app server (from app folder)
cd packages/malv-apps/auth
malv build node

# Multi-app server (from project root)
malv build node --all                    # All workspace apps
malv build node --filter=@malv/auth --filter=@malv/conversation

# With workspace dependency resolution
malv build node --all --resolve

# Custom output directory
malv build node --all --output=./server

# Self-contained server with embedded infrastructure (Mode 3)
malv build node --all --include-infrastructure

Behavior:

  • malv build / malv build core: Builds app core (Rollup + TypeScript declarations)
  • malv build node: Builds deployable Node.js server
    • From app folder: Single-app server
    • From project root with --all or --filter: Multi-app server

Node.js Server Output:

Single-app server (malv build node from app folder):

dist/
├── server.js        # HTTP server
├── handler.js       # Request routing
├── tools.js         # Bundled tool implementations
├── package.json
├── .env.example
└── config/
    └── tools.json, tokens.json, etc.

Multi-app server (malv build node --all from project root):

dist/
├── server.js              # HTTP server with app routing
├── capabilities.js        # HTTP-based capability factory
├── apps/
│   ├── manifest.json      # List of included apps
│   ├── @malv-auth/
│   │   ├── handler.js
│   │   ├── tools.js
│   │   └── config/
│   └── @malv-conversation/
│       └── ...
├── package.json           # Combined dependencies
└── .env.example

Self-contained server (malv build node --all --include-infrastructure):

dist/
├── server.js              # Monolith server (initializes infrastructure)
├── capabilities.js        # Embedded capability factory (in-process services)
├── infrastructure/        # Bundled infrastructure services
│   ├── services.js        # All service classes
│   ├── file-bucket.js     # File storage abstraction
│   ├── token-signer.js    # Ed25519 signing
│   └── security-key.js    # Security key generation
├── apps/
│   ├── manifest.json      # { mode: "monolith", infrastructure: true, ... }
│   ├── @malv-auth/
│   │   ├── handler.js
│   │   ├── tools.js
│   │   └── config/
│   └── ...
├── data/                  # Created at runtime
│   ├── storage/
│   ├── keys/
│   ├── embeddings/
│   └── queue/
├── package.json           # Includes infrastructure dependencies
└── .env.example           # Minimal config (PORT, DATA_DIR, AI_API_KEY)

Multi-App Server Routing:

Requests are routed by app name:

  • GET /health - Server health check
  • GET /apps - List all hosted apps
  • POST /apps/auth/execute - Execute tool in @malv/auth
  • POST /apps/@malv/auth/execute - Also works with full app name
  • POST /apps/conversation/execute-batch - Batch execute in @malv/conversation

Rollup config validation:

The command warns if rollup.config.js is missing the required typescript plugin configuration:

typescript({
    tsconfigOverride: {
        compilerOptions: {
            declaration: false,
            declarationMap: false,
        },
    }
})

This ensures type declarations for bundled dependencies aren't included in the output.

See NODE_BUILD_PLAN.md for detailed documentation on Node.js build modes.


malv generate

Runs code generators to create TypeScript types from JSON schemas.

malv generate [subcommand]

Subcommands:

| Command | Description | |---------|-------------| | all | Run all generators (default) | | types | Generate tool input/output types from tools.json | | tokens | Generate TokenPayloads.ts from tokens.json | | events | Generate EventHandlerTypes.ts from events.json | | env | Generate Environment.ts from environment.json | | exports | Generate package.json exports from tools/objects | | objects | Generate object type definitions from objects.json | | tools | Generate tools.json from tool TypeScript files | | icons | Generate icon scaffolding from objects.json | | renders | Generate web renderer scaffolding from objects.json |

Usage:

# Run all generators
malv generate

# Run specific generator
malv generate tokens
malv generate types
malv generate objects

When to use:

Run generators after modifying:

  • tokens.jsonmalv generate tokens
  • events.jsonmalv generate events
  • tools.json or tool files → malv generate types
  • objects.jsonmalv generate objects
  • environment.jsonmalv generate env

Note: malv build automatically runs all generators unless --skip-gen is specified.


malv validate

Runs TypeScript validation on all apps in malv.json.

malv validate

Features:

  • Runs tsc --noEmit on each app in parallel
  • Shows per-app error counts
  • Displays detailed errors for failing apps
  • Exits with code 1 if any app has errors

malv overview

Displays a formatted overview of storage paths, tokens, tools, and objects for apps.

malv overview [options] [@app-name...]

Section Filter Options:

  • --storage, -s - Show only storage paths
  • --tokens, -t - Show only token definitions
  • --tools, -T - Show only tool definitions
  • --objects, -o - Show only object definitions

App Filter Options:

  • @app-name - Filter to specific apps (e.g., @malv/auth)
  • --filter, -f - Explicit filter flag followed by app names

Behavior:

  • Primary: Searches for malv.json in current directory and parent directories, shows all apps (or filtered apps)
  • Fallback: If no malv.json found, checks if current folder is an app (has storage.json, tokens.json, tools.json, or objects.json) and shows that app only

Examples:

malv overview                           # Show all info for all apps
malv overview --storage                 # Show only storage paths
malv overview --tokens                  # Show only token definitions
malv overview --tools                   # Show only tools
malv overview --objects                 # Show only objects

# Filter to specific apps
malv overview @malv/auth                # Show only @malv/auth
malv overview @malv/auth @malv/research # Show multiple specific apps
malv overview --filter @malv/auth       # Explicit filter syntax

# Combine section and app filters
malv overview --tokens @malv/auth       # Show tokens for @malv/auth only

# From within an app folder
cd packages/malv-apps/auth
malv overview                           # Show overview for @malv/auth only

Output includes:

  • App description from package.json
  • Storage Paths: Permission-enforced storage paths with read/write indicators and template variables
  • Tokens: Token names with state, description, and payload fields
  • Tools: Tool names with descriptions (hidden tools shown as count)
  • Objects: Object definitions with title, renders, capabilities, storage location, and metadata fields

malv install

Downloads and installs systems from the MALV registry.

malv install [@system[@version]...]

Options:

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

Usage:

# Install all registry systems from malv.json
malv install

# Install a specific system (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 systems
malv install @malv/gmail @malv/calendar @acme/custom-tool

# Check what would be installed
malv install --dry-run

# Force reinstall
malv install @malv/gmail --force

Version Resolution:

| Format | Example | Resolution | |--------|---------|------------| | Exact | "1.2.3" | Installs exactly 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 |

Flow:

  1. Parses CLI arguments or reads malv.json for registry apps
  2. Checks local cache (malv_systems/) for existing installations
  3. Fetches system metadata from registry for version resolution
  4. Resolves semver ranges to exact versions
  5. Downloads files in parallel with integrity verification
  6. Updates malv.lock with resolved versions

Lock File (malv.lock):

The install command creates/updates a lock file that records exact installed versions:

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

Private Systems:

For private systems, you must be logged in (malv login) and be a member of the organization.


malv uninstall

Remove installed systems from the local cache.

malv uninstall @malv/gmail           # Remove all versions
malv uninstall @malv/[email protected]     # Remove specific version
malv uninstall @malv/gmail --dry-run # Preview removal

Options:

  • --dry-run - Show what would be removed without deleting

Removes systems from malv_systems/ and updates malv.lock. Does not modify malv.json.


malv upgrade

Upgrade apps in malv.json to their latest versions from the registry.

malv upgrade [options] [@app-name...]

Options:

  • --dry-run - Show what would be upgraded without making changes
  • --verbose, -v - Show detailed progress
  • --help, -h - Show help message

Usage:

# Upgrade all registry apps to latest
malv upgrade

# Preview what would be upgraded
malv upgrade --dry-run

# Upgrade specific app
malv upgrade @malv/gmail

# Upgrade multiple specific apps
malv upgrade @malv/gmail @acme/tool

Flow:

  1. Reads malv.json and identifies registry apps (semver versions)
  2. Queries the registry for the latest version of each app
  3. Compares current versions with latest available
  4. Updates malv.json with the new versions
  5. Prompts to run malv install to download the updated versions

Output:

$ malv upgrade

Checking for updates...

  ✓ @malv/gmail ^1.0.0 → 1.2.3
  ✓ @acme/tool 1.0.0 → 2.0.0
  ℹ @malv/auth (already on latest)

Updating malv.json...

✓ Upgraded 2 app(s)
  @malv/gmail: ^1.0.0 → 1.2.3
  @acme/tool: 1.0.0 → 2.0.0

Run 'malv install' to download the new versions.

Notes:

  • Only affects registry apps (semver versions). Workspace and local path apps are skipped.
  • Apps using "latest" tag are skipped since they always resolve to the newest version.
  • For private apps, you must be logged in (malv login).

malv update

Update @malv/cli to the latest version.

malv update [options]

Options:

  • --status, -s - Show current version and update status
  • --disable, -d - Disable automatic update checks on startup
  • --enable, -e - Enable automatic update checks on startup
  • --help, -h - Show help message

Usage:

# Update to latest version
malv update

# Check current version and update status
malv update --status

# Disable update notifications
malv update --disable

# Re-enable update notifications
malv update --enable

Automatic Update Checks:

By default, the CLI performs a non-blocking background check for updates on every command. If a newer version is available, a notification is displayed after the command completes.

  • Checks are cached for 24 hours to minimize network requests
  • Update checks never block or slow down CLI operation
  • Failures are silent - no error messages if network is unavailable
  • Use malv update --disable to stop automatic checks

Output:

$ malv update

Checking for updates...
Updated @malv/cli: 1.0.0 -> 1.1.0

Update Notification:

$ malv env

... (command output) ...

──────────────────────────────────────────────────
  Update available: 1.0.0 -> 1.1.0
  Run malv update to update
──────────────────────────────────────────────────

See AUTO_UPDATE.md for detailed documentation on the auto-update system architecture, caching behavior, and troubleshooting.


malv publish

Publishes a system to the MALV registry.

malv publish [options]

Options:

  • --patch - Bump patch version before publishing (1.0.0 → 1.0.1)
  • --minor - Bump minor version before publishing (1.0.0 → 1.1.0)
  • --major - Bump major version before publishing (1.0.0 → 2.0.0)
  • --resolve, -r - Resolve workspace:* dependencies to actual versions
  • --force - Skip npm verification for resolved dependencies (use with --resolve)
  • --dry-run - Show what would be published without uploading
  • --access <type> - Set package access: public (default) or private

Usage:

# From within an app directory
cd packages/malv-apps/gmail
malv publish

# With version bump
malv publish --patch    # 1.0.0 → 1.0.1
malv publish --minor    # 1.0.0 → 1.1.0
malv publish --major    # 1.0.0 → 2.0.0

# Preview what would be published
malv publish --dry-run

# Publish as private
malv publish --access private

Requirements:

  • Must be run from within a MALV app directory
  • App must be built first (yarn build) - the dist/ directory is required
  • Must have package.json with valid @org/name format
  • Must have tools.json
  • Must be logged in (malv login)
  • Must have publish permission in the organization

What gets published:

  • Required: package.json, tools.json, dist/
  • Optional (if present): tokens.json, storage.json, events.json, objects.json, environment.json
  • Optional directories (if present): embeddings/, objects/, perception/, examples/

Workspace dependency resolution:

If your package.json contains workspace:* dependencies, use the --resolve flag:

malv publish --resolve
# or
malv publish -r

This resolves workspace:* to actual versions (e.g., ^1.2.3), verifies they exist on npm, and restores your package.json after publishing.

For dependencies not on npm, use the internal field to bundle them:

{
    "dependencies": {
        "@malv/types": "workspace:*",
        "@myorg/private-utils": "workspace:*"
    },
    "internal": ["@myorg/private-utils"]
}

Then run malv build && malv publish -r.

See RESOLVE_INFO.md for detailed documentation on workspace resolution, internal dependencies, and troubleshooting.

Package.json cleanup:

When publishing, these fields are automatically stripped:

  • scripts - Build scripts not needed
  • internal - Only used during build/publish

Note: devDependencies are preserved because they contain runtime dependencies like @malv/runtime that are needed when running the app with malv dev. Workspace versions in devDependencies are resolved just like regular dependencies.

Output:

$ malv publish

Publishing @malv/[email protected]...

Validating...
  ✓ package.json
  ✓ tools.json (3 tools)
  ✓ tokens.json (1 tokens)
  ✓ dist/ (12 files)
  ✓ workspace dependencies (2 resolved)
      @malv/types: workspace:* → 1.2.3
      @malv/utils: workspace:* → 0.5.0

✓ Received 15 signed URLs

Uploading 15 files (245 KB)...
  ✓ package.json
  ✓ tools.json
  ...

✓ Published successfully

✓ @malv/[email protected] published!

Install with:
  malv install @malv/[email protected]

See PUBLISH_INFO.md for detailed documentation on the publish flow, file requirements, and troubleshooting.


malv login

Authenticate with the MALV registry using browser-based OAuth. Required for publishing systems and installing private systems.

malv login

Output:

$ malv login

Opening browser for authentication...

Waiting for authentication... (press Ctrl+C to cancel)

✓ Logged in as [email protected]
  Organizations: @malv, @acme

Token saved to ~/.malv/auth.json

See LOGIN_INFO.md for detailed documentation on the authentication flow, when auth is required, and troubleshooting.


malv whoami

Shows the currently logged in user.

malv whoami

Output:

Logged in as [email protected]
  User ID: usr_abc123
  Name: John Doe

Organizations:
  @malv (member)
  @acme (owner)

Token expires in 28 days.

malv logout

Removes the stored authentication token.

malv logout

Output:

✓ Logged out from [email protected]
Token removed from ~/.malv/auth.json

malv org

Manage organizations - create, list members, invite users, and control access.

malv org <command> [args] [options]

Commands:

| Command | Description | |---------|-------------| | create <name> | Create a new organization | | list | List your organizations | | info <name> | Show organization details | | systems <name> | List organization's published systems | | users <name> | List organization members | | invite <name> <email> | Invite a user to an organization | | join <name> | Accept a pending invitation | | leave <name> | Leave an organization | | kick <name> [user-id] | Remove a member | | role <name> <user-id> <role> | Change a member's role |

Roles: owner, admin, developer, member

Examples:

# Create an organization
malv org create mycompany

# List your organizations
malv org list

# Invite a user as admin
malv org invite mycompany [email protected] --role admin

# Accept an invitation
malv org join mycompany

# Change a member's role
malv org role mycompany usr_abc123 developer

# Remove a member (interactive picker)
malv org kick mycompany

# Leave an organization
malv org leave mycompany --yes

See ORG_INFO.md for detailed documentation on organization management, role permissions, and common workflows.


Configuration

malv.json

interface Config {
    domain?: string;
    apps: Record<string, AppConfig>;
    web: string[];  // Paths to web projects (relative to malv.json)
}

type AppConfig = string | { version: string; route?: string };

Example:

{
    "domain": "example.com",
    "apps": {
        "@malv/auth": "workspace:*",
        "@malv/gmail": { "version": "workspace:*", "route": "gmail" }
    },
    "web": ["packages/web"]
}

Version Formats

| Format | Description | Example | |--------|-------------|---------| | Semver | Registry app | "1.0.0", "^1.2.0" | | workspace:* | Find in workspace | Auto-discovers app folder | | workspace:path | Specific workspace path | "workspace:apps/auth" | | ./path | Local path | "./local/my-app" | | git:url | Git repository | "git:https://github.com/..." |


Storage Structure

Project Directory

project/
├── malv.json
├── malv.lock              # Lock file with resolved versions
├── malv_systems/          # Downloaded registry apps (workspace-compatible)
│   ├── @scope-name/       # e.g., @malv-gmail (dash instead of slash)
│   │   ├── package.json
│   │   ├── tools.json
│   │   └── dist/
│   └── .tmp/              # Temp directory for atomic installs
└── .malv/
    ├── dev/               # Dev environment files
    │   └── .env.{app-name}
    ├── production/        # Production environment files
    │   └── .env.{app-name}
    ├── running-apps.json  # Registry of running apps (for health checks)
    └── dev-logs.jsonl     # Shared log file

The malv_systems/ directory can be added to your package.json workspaces to enable yarn install to install dependencies for each system:

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

This is important because systems have devDependencies like @malv/runtime that are needed when running malv dev.

The .malv/ directory should be added to .gitignore as it contains secrets. The malv.lock file should be committed to version control for reproducible installs.

User Directory (~/.malv/)

~/.malv/
├── auth.json              # Authentication token (from malv login)
├── ai-config.json         # AI API key configuration (from malv ai set)
├── update-config.json     # Update preferences (from malv update --disable/--enable)
└── update-check.json      # Cached update check results

The auth.json and ai-config.json files contain sensitive credentials and are created with restricted permissions (600). The update config and cache files store update preferences and check results.


Directory Structure

src/
├── bin/               # CLI entry points
│   ├── malv.ts        # Main CLI router
│   ├── ai.ts          # AI API key management
│   ├── dev.ts         # Development server
│   ├── env.ts         # Environment configuration
│   ├── install.ts     # Install systems from registry
│   ├── publish.ts     # Publish systems to registry
│   ├── update.ts      # Self-update command
│   ├── upgrade.ts     # Upgrade apps in malv.json
│   ├── org.ts         # Organization management router
│   ├── logs.ts        # Log viewer
│   ├── logs-html.ts   # Generate HTML from logs
│   ├── logs-open.ts   # Open log file location
│   ├── validate.ts    # TypeScript validation
│   ├── login.ts       # Registry authentication
│   ├── logout.ts      # Remove authentication
│   └── whoami.ts      # Show current user
├── types/             # TypeScript interfaces
│   ├── Config.ts
│   ├── AppConfig.ts
│   ├── AppEnvStatus.ts
│   ├── Auth.ts        # Authentication types
│   ├── LockFile.ts    # Lock file types
│   ├── Org.ts         # Organization types
│   ├── UpdateConfig.ts # Update configuration types
│   └── env/
└── utility/           # Helper functions
    ├── findConfig.ts
    ├── findApp.ts
    ├── findAvailablePort.ts
    ├── runMalvDev.ts
    ├── runWebDev.ts
    ├── semver.ts      # Semver parsing and resolution
    ├── env/
    ├── auth/          # Authentication utilities
    │   ├── getAuthToken.ts
    │   ├── saveAuthToken.ts
    │   ├── clearAuthToken.ts
    │   ├── isTokenExpired.ts
    │   └── startAuthServer.ts
    ├── install/       # Install utilities
    │   ├── cache.ts   # Local cache management
    │   ├── download.ts # File download and integrity
    │   ├── lockFile.ts # Lock file management
    │   └── resolve.ts  # Version resolution
    ├── org/           # Organization utilities
    │   ├── create.ts  # Create organization
    │   ├── list.ts    # List organizations
    │   ├── info.ts    # Organization details
    │   ├── systems.ts # List org systems
    │   ├── users.ts   # List org members
    │   ├── invite.ts  # Invite user
    │   ├── join.ts    # Accept invitation
    │   ├── leave.ts   # Leave organization
    │   ├── kick.ts    # Remove member
    │   └── role.ts    # Change member role
    ├── build/         # Build utilities
    │   ├── node.ts          # Single-app Node.js server build
    │   └── node-multi.ts    # Multi-app Node.js server build
    ├── publish/       # Publish utilities
    │   ├── validateApp.ts   # App validation
    │   ├── collectFiles.ts  # File collection
    │   ├── upload.ts        # File upload
    │   ├── bumpVersion.ts   # Version bumping
    │   └── formatBytes.ts   # Size formatting
    ├── update/        # Update utilities
    │   ├── checkForUpdate.ts    # Version checking logic
    │   ├── performUpdate.ts     # Update execution
    │   ├── getInstalledVersion.ts # Read local package version
    │   ├── getLatestVersion.ts  # Fetch latest from npm
    │   ├── updateConfig.ts      # Config management
    │   └── notifyUpdate.ts      # Display update notification
    └── registry/      # Registry API client
        └── client.ts

Related Documentation

Detailed documentation for specific features is available in the info/ directory:

Development & Infrastructure

  • DEV_WORKFLOW.md - Development workflow, multi-app batching, code generators, and app initialization
  • INFRASTRUCTURE_SERVER.md - Local infrastructure server endpoints, health monitoring, and architecture

Storage & Permissions

Commands