run-stack 0.4.4

One command to boot a full local stack in Docker: API, Vite apps, Expo mobile, desktop renderer, database, mail and a status dashboard.
Documentation
/**
 * Fig / Amazon Q / Kiro CLI completion spec for run-stack.
 * Installed to ~/.fig/autocomplete/build/run-stack.js
 */
var completionSpec = {
  name: ["run-stack", "rst"],
  description: "Dockerised local stacks",
  subcommands: [
    {
      name: "create",
      description: "Write .run/run.config.json and run init",
      args: { name: "dir", template: "folders", isOptional: true },
      options: [
        { name: ["--yes", "-y"], description: "Accept defaults" },
        { name: ["--force", "-f"], description: "Overwrite existing config" },
        { name: "--file", args: { name: "json", template: "filepaths" } },
      ],
    },
    { name: "new", description: "Alias for create" },
    {
      name: "layout-migrate",
      description: "Convert legacy run/ to .run/ (also: migrate)",
      args: { name: "dir", template: "folders", isOptional: true },
    },
    {
      name: "migrate",
      description: "Convert legacy run/ layout, or run DB migrations in a workspace",
      args: { name: "dir", template: "folders", isOptional: true },
    },
    {
      name: "upgrade",
      description: "Refresh legacy run/ or self-update (config layout)",
      args: { name: "dir", template: "folders", isOptional: true },
    },
    { name: "update", description: "Alias for upgrade" },
    {
      name: "self-update",
      description: "Install the latest run-stack from npm/volta/pnpm",
      options: [{ name: "--verbose", description: "Verbose installer output" }],
    },
    {
      name: "completion",
      description: "Shell / Kiro autocompletion",
      subcommands: [
        { name: "zsh", description: "Print zsh completer" },
        { name: "bash", description: "Print bash completer" },
        { name: "install", description: "Install zsh + Kiro/Fig completers" },
        { name: "services", description: "List compose service names" },
      ],
    },
    { name: "init", description: "Write .run/run.config.json and .run/.env" },
    {
      name: "up",
      description: "Build if needed and start the stack",
      options: [
        { name: "--build", description: "Rebuild images first" },
        {
          name: "--essential",
          description: "Only services listed under essential in run.config.json",
        },
      ],
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    {
      name: "run",
      description: "Alias for up",
      options: [
        { name: "--build", description: "Rebuild images first" },
        {
          name: "--essential",
          description: "Only services listed under essential in run.config.json",
        },
      ],
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    {
      name: "down",
      description: "Stop everything, or just the named services (keeps data)",
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    {
      name: "restart",
      description: "Stop then start (down + up)",
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
      options: [
        { name: "--build", description: "Rebuild images before starting" },
        {
          name: "--essential",
          description: "Only services listed under essential in run.config.json",
        },
      ],
    },
    {
      name: "rebuild",
      description: "Rebuild images and recreate containers",
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    { name: "clean", description: "Stop and delete volumes" },
    {
      name: "commands",
      description: "List every CLI command in a table",
      options: [{ name: "--raw", description: "One command name per line" }],
    },
    {
      name: "apps",
      description: "List configured apps (backend, web, mobile, …)",
    },
    { name: "list", description: "Alias for apps" },
    {
      name: "services",
      description: "List compose services for this workspace",
      options: [{ name: "--raw", description: "One service name per line" }],
    },
    {
      name: "ps",
      description: "Service status",
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    { name: "status", description: "Alias for ps" },
    {
      name: "ports",
      description: "Host ports + env URLs table",
      options: [
        { name: ["--show", "-s"], description: "Print ports + env URL tables (default)" },
        { name: ["-h", "--help"], description: "Show help" },
      ],
    },
    {
      name: "logs",
      description: "Follow logs",
      args: {
        name: "service",
        isOptional: true,
        isVariadic: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    {
      name: "shell",
      description: "Shell into a container",
      args: {
        name: "service",
        isOptional: true,
        generators: {
          script: ["run-stack", "completion", "services"],
          splitOn: "\n",
        },
      },
    },
    { name: "sh", description: "Alias for shell" },
    { name: "backend", description: "Run a command in the backend container", args: { name: "args", isVariadic: true, isOptional: true } },
    { name: "artisan", description: "php artisan (Laravel)" },
    { name: "composer", description: "composer (Laravel)" },
    { name: "seed", description: "Run database seeders" },
    { name: "fresh", description: "Rebuild schema and seed" },
    { name: "pnpm", description: "pnpm in the frontend workspace" },
    { name: "dash", description: "Open the status dashboard" },
    { name: "dashboard", description: "Alias for dash" },
    { name: "ios", description: "Open mobile app in the iOS Simulator" },
    { name: "android", description: "Open mobile app on an Android emulator" },
    { name: "device", description: "Open on a USB device" },
    {
      name: "mobile",
      description: "Restart mobile-deps / mobile-packages / Metro",
      options: [{ name: "--build", description: "Rebuild images before starting" }],
    },
    {
      name: "reload",
      description: "Check Metro /status and reload apps (no Docker restart)",
      options: [
        { name: "--clear", description: "Wipe Metro/Expo disk caches, then reload" },
      ],
    },
    {
      name: "prebuild",
      description: "expo prebuild for the mobile app (Expo only)",
      args: { name: "args", isOptional: true, isVariadic: true },
    },
    { name: "desktop", description: "Launch Electron / Tauri shell" },
    {
      name: "deploy",
      description: "Deploy web, mobile or desktop",
      args: { name: "target", suggestions: ["web", "mobile", "desktop"] },
    },
    { name: "sync-mobile-port", description: "Sync MOBILE_CLIENT_PORT into the mobile app" },
    {
      name: "bundler",
      description: "Point the simulator at Metro (Expo deep link)",
      args: { name: "platform", suggestions: ["ios", "android"], isOptional: true },
    },
    { name: "configure-bundler", description: "Alias for bundler" },
    { name: "help", description: "Show help" },
  ],
  options: [
    { name: ["-h", "--help"], description: "Show help" },
    { name: ["-v", "--version"], description: "Show version" },
  ],
};

// Fig / Kiro loaders accept either a global or a default export.
if (typeof module !== "undefined" && module.exports) {
  module.exports = completionSpec;
}