{
  "id": "juicefs",
  "name": "JuiceFS",
  "homepage": "https://juicefs.com/",
  "description": "JuiceFS is a distributed POSIX file system built on top of Redis and S3.",
  "executables": [
    "juicefs"
  ],
  "dotfiles": {
    "paths": [
      "~/.juicefs/"
    ],
    "exclude": [
      "~/.juicefs/cache/"
    ],
    "secret": [
      "~/.juicefs/*.conf"
    ]
  },
  "commands": {
    "format": 1,
    "label": "JuiceFS",
    "description": "Create, mount and unmount JuiceFS volumes. Metadata, cache, FUSE tuning, gateway, sync and the other tools are left out.",
    "quality": "ai-draft",
    "parser": {
      "end_of_options": "--",
      "interleave": "permute",
      "long_equals": true,
      "short_attached": true,
      "short_bundles": false
    },
    "subcommand": [
      {
        "path": [
          "format"
        ],
        "label": "Create a volume",
        "description": "Format a file system on a metadata engine. Credentials passed as flags show up in shell history; the ACCESS_KEY and SECRET_KEY environment variables are safer and not covered here.",
        "source": [
          {
            "id": "ref",
            "kind": "manual",
            "url": "https://juicefs.com/docs/community/command_reference#format",
            "revision": "main 2026-10-27",
            "evidence": "juicefs format [command options] META-URL NAME\n|`META-URL`|Database URL of the metadata engine.|\n|`NAME`|Name of the file system|\n|`--force`|overwrite existing format (default: false)|\n|`--storage=file`|Object storage type (e.g. `s3`, `gs`, `oss`, `cos`) (default: `file`)|\n|`--bucket=/var/jfs`|A bucket URL to store data|\n|`--compress=none`|compression algorithm, choose from `lz4`, `zstd`, `none` (default).|\n|`--capacity=0`|storage space limit in GiB, default to 0 which means no limit.|\n|`--inodes=0`|Limit the number of inodes, default to 0 which means no limit.|\n|`--trash-days=1`|number of days before trash files are expired, set to 0 to disable trash.|\n"
          }
        ],
        "field": [
          {
            "id": "meta_url",
            "label": "Metadata URL",
            "description": "For example redis://localhost or sqlite3://myjfs.db.",
            "type": "string",
            "position": 0,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "name",
            "label": "Volume name",
            "type": "string",
            "position": 1,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "storage",
            "label": "Object storage type",
            "type": "string",
            "option": [
              "--storage"
            ],
            "suggestions": [
              {
                "value": "file",
                "label": "Local files"
              },
              {
                "value": "s3",
                "label": "S3"
              },
              {
                "value": "gs",
                "label": "Google Cloud Storage"
              },
              {
                "value": "oss",
                "label": "Aliyun OSS"
              },
              {
                "value": "cos",
                "label": "Tencent COS"
              }
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "bucket",
            "label": "Bucket URL or directory",
            "type": "string",
            "option": [
              "--bucket"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "compress",
            "label": "Compression",
            "type": "enum",
            "option": [
              "--compress"
            ],
            "choices": [
              {
                "value": "none",
                "label": "None"
              },
              {
                "value": "lz4",
                "label": "lz4"
              },
              {
                "value": "zstd",
                "label": "zstd"
              }
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "capacity",
            "label": "Capacity limit (GiB)",
            "type": "integer",
            "option": [
              "--capacity"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "inodes",
            "label": "Inode limit",
            "type": "integer",
            "option": [
              "--inodes"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "trash_days",
            "label": "Trash retention (days)",
            "description": "0 disables the trash.",
            "type": "integer",
            "option": [
              "--trash-days"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "force",
            "label": "Overwrite existing format",
            "type": "boolean",
            "option": [
              "--force"
            ],
            "effect": "overwrite",
            "sources": [
              "ref"
            ]
          }
        ],
        "task": [
          {
            "id": "local-test",
            "label": "Local test volume",
            "fields": [
              "meta_url",
              "name",
              "storage",
              "bucket"
            ],
            "required": [
              "meta_url",
              "name"
            ]
          },
          {
            "id": "object-storage",
            "label": "Object-storage volume",
            "fields": [
              "meta_url",
              "name",
              "storage",
              "bucket",
              "compress",
              "capacity",
              "trash_days"
            ],
            "required": [
              "meta_url",
              "name",
              "storage",
              "bucket"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "meta_url",
              "name",
              "storage",
              "bucket"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "compress",
              "capacity",
              "inodes",
              "trash_days",
              "force"
            ]
          }
        ]
      },
      {
        "path": [
          "mount"
        ],
        "label": "Mount a volume",
        "description": "Mount a formatted volume. Cache, metadata and FUSE tuning options are left out.",
        "source": [
          {
            "id": "ref",
            "kind": "manual",
            "url": "https://juicefs.com/docs/community/command_reference#mount",
            "revision": "main 2026-10-27",
            "evidence": "juicefs mount [command options] META-URL MOUNTPOINT\n|`META-URL`|Database URL of the metadata engine.|\n|`MOUNTPOINT`|file system mount point, e.g. `/mnt/jfs`, `Z:`.|\n|`-d, --background`|run in background (default: false)|\n|`--log=path`|path of log file when running in background|\n|`--force`|force to mount even if the mount point is already mounted by the same filesystem.|\njuicefs mount redis://localhost /mnt/jfs --subdir /dir/in/jfs\njuicefs mount redis://localhost /mnt/jfs -d --writeback\njuicefs mount redis://localhost /mnt/jfs -d --read-only\n"
          }
        ],
        "field": [
          {
            "id": "meta_url",
            "label": "Metadata URL",
            "type": "string",
            "position": 0,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "mountpoint",
            "label": "Mount point",
            "type": "path",
            "position": 1,
            "path": {
              "kind": "directory",
              "role": "output"
            },
            "sources": [
              "ref"
            ]
          },
          {
            "id": "background",
            "label": "Run in background",
            "type": "boolean",
            "option": [
              "--background",
              "-d"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "read_only",
            "label": "Read-only",
            "type": "boolean",
            "option": [
              "--read-only"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "writeback",
            "label": "Writeback cache",
            "description": "Faster writes at the risk of losing objects.",
            "type": "boolean",
            "option": [
              "--writeback"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "subdir",
            "label": "Sub-directory as root",
            "type": "string",
            "option": [
              "--subdir"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "log",
            "label": "Log file (background)",
            "type": "path",
            "option": [
              "--log"
            ],
            "path": {
              "kind": "file",
              "role": "output"
            },
            "sources": [
              "ref"
            ]
          },
          {
            "id": "force",
            "label": "Force mount",
            "type": "boolean",
            "option": [
              "--force"
            ],
            "effect": "overwrite",
            "sources": [
              "ref"
            ]
          }
        ],
        "task": [
          {
            "id": "mount-bg",
            "label": "Mount in background",
            "set": {
              "background": [
                true
              ]
            },
            "fields": [
              "meta_url",
              "mountpoint",
              "background",
              "read_only",
              "subdir"
            ],
            "required": [
              "meta_url",
              "mountpoint"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "meta_url",
              "mountpoint",
              "background",
              "read_only"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "writeback",
              "subdir",
              "log",
              "force"
            ]
          }
        ]
      },
      {
        "path": [
          "umount"
        ],
        "label": "Unmount a volume",
        "description": "Unmount a JuiceFS mount point.",
        "source": [
          {
            "id": "ref",
            "kind": "manual",
            "url": "https://juicefs.com/docs/community/command_reference#umount",
            "revision": "main 2026-10-27",
            "evidence": "juicefs umount [command options] MOUNTPOINT\n|`-f, --force`|force unmount a busy mount point (default: false)|\n|`--flush`|wait for all staging chunks to be flushed (default: false)|\n"
          }
        ],
        "field": [
          {
            "id": "mountpoint",
            "label": "Mount point",
            "type": "path",
            "position": 0,
            "path": {
              "kind": "directory",
              "role": "input"
            },
            "sources": [
              "ref"
            ]
          },
          {
            "id": "force",
            "label": "Force unmount a busy mount",
            "type": "boolean",
            "option": [
              "--force",
              "-f"
            ],
            "effect": "overwrite",
            "sources": [
              "ref"
            ]
          },
          {
            "id": "flush",
            "label": "Flush staged chunks first",
            "type": "boolean",
            "option": [
              "--flush"
            ],
            "sources": [
              "ref"
            ]
          }
        ],
        "task": [
          {
            "id": "umount",
            "label": "Unmount",
            "fields": [
              "mountpoint",
              "flush"
            ],
            "required": [
              "mountpoint"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "mountpoint",
              "flush",
              "force"
            ]
          }
        ]
      }
    ]
  }
}
