{
  "id": "storj-uplink",
  "name": "Storj Uplink CLI",
  "homepage": "https://storj.dev/dcs/api/uplink-cli",
  "description": "A command-line application for uploading and managing objects and buckets",
  "executables": [
    "uplink"
  ],
  "dotfiles": {
    "paths": [
      "[configHome]/storj/uplink/config.yaml",
      "[appData]/Storj/Uplink/config.yaml",
      "%APPDATA%/Storj/Uplink/config.yaml"
    ],
    "secret": [
      "[configHome]/storj/uplink/access.json",
      "[appData]/Storj/Uplink/access.json",
      "%APPDATA%/Storj/Uplink/access.json"
    ]
  },
  "commands": {
    "format": 1,
    "label": "Storj uplink",
    "description": "Copy files to and from Storj buckets with uplink cp. Other subcommands (ls, rm, mb, share, access) are not covered.",
    "quality": "ai-draft",
    "parser": {
      "end_of_options": "--",
      "interleave": "permute",
      "long_equals": true,
      "short_attached": true,
      "short_bundles": false
    },
    "subcommand": [
      {
        "path": [
          "cp"
        ],
        "label": "Copy files and objects",
        "description": "Upload, download or server-side copy. Use sj://bucket/key for Storj locations; wildcards are not supported and only one source is allowed.",
        "source": [
          {
            "id": "docs",
            "kind": "manual",
            "url": "https://docs.storj.io/dcs/api/uplink-cli/cp-command",
            "revision": "2026-10-27",
            "evidence": "uplink cp [flags] SOURCE DESTINATION\n--access string\tthe serialized access, or name of the access to use\n-r, --recursive\tPerform a recursive copy\n-t, --transfers int\tControls how many uploads/downloads to perform in parallel (default 1)\n--dry-run\tPrint what operations would happen but don't execute them\n--progress\tShow a progress bar when possible (default true)\n-p, --parallelism int\tControls how many parallel chunks to upload/download from a file (default 1)\n--expires relative_date\tSchedule removal after this time (e.g. '+2h', 'now', '2020-01-02T15:04:05Z0700')\nuplink cp cheesecake.jpg sj://cakes\nuplink cp sj://cakes/cheesecake.jpg ~/Downloads/\n"
          }
        ],
        "field": [
          {
            "id": "source",
            "label": "Source",
            "description": "Local path or sj://bucket/key.",
            "type": "string",
            "position": 0,
            "min": 1,
            "sources": [
              "docs"
            ]
          },
          {
            "id": "destination",
            "label": "Destination",
            "description": "Local path or sj://bucket/key.",
            "type": "string",
            "position": 1,
            "min": 1,
            "sources": [
              "docs"
            ]
          },
          {
            "id": "recursive",
            "label": "Recursive",
            "type": "boolean",
            "option": [
              "--recursive",
              "-r"
            ],
            "sources": [
              "docs"
            ]
          },
          {
            "id": "dry_run",
            "label": "Dry run",
            "type": "boolean",
            "option": [
              "--dry-run"
            ],
            "sources": [
              "docs"
            ]
          },
          {
            "id": "access",
            "label": "Access name or grant",
            "description": "A serialized access grant is a secret and ends up in shell history.",
            "type": "string",
            "option": [
              "--access"
            ],
            "sources": [
              "docs"
            ]
          },
          {
            "id": "transfers",
            "label": "Parallel transfers",
            "type": "integer",
            "option": [
              "--transfers",
              "-t"
            ],
            "sources": [
              "docs"
            ]
          },
          {
            "id": "parallelism",
            "label": "Parallel chunks per file",
            "type": "integer",
            "option": [
              "--parallelism",
              "-p"
            ],
            "sources": [
              "docs"
            ]
          },
          {
            "id": "expires",
            "label": "Expire after",
            "description": "Relative time such as +2h, or an ISO 8601 date.",
            "type": "string",
            "option": [
              "--expires"
            ],
            "sources": [
              "docs"
            ]
          }
        ],
        "task": [
          {
            "id": "upload",
            "label": "Upload",
            "fields": [
              "source",
              "destination",
              "recursive",
              "expires"
            ],
            "required": [
              "source",
              "destination"
            ]
          },
          {
            "id": "download",
            "label": "Download",
            "fields": [
              "source",
              "destination",
              "recursive",
              "parallelism"
            ],
            "required": [
              "source",
              "destination"
            ]
          },
          {
            "id": "preview",
            "label": "Dry run",
            "fields": [
              "source",
              "destination",
              "recursive",
              "dry_run"
            ],
            "required": [
              "source",
              "destination",
              "dry_run"
            ],
            "set": {
              "dry_run": [
                true
              ]
            }
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "source",
              "destination",
              "recursive",
              "dry_run"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "access",
              "transfers",
              "parallelism",
              "expires"
            ]
          }
        ]
      }
    ]
  }
}
