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] # Storj's official CLI docs identify the platform config directory, and the # official support documentation identifies config.yaml plus access.json as # the local access store. access.json contains serialized access grants. # https://storj.dev/dcs/api/uplink-cli # https://forum.storj.io/t/sharing-publicly-an-api-key-for-read-only-access/20612 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 } [[commands.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." [[commands.subcommand.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 --access string the serialized access, or name of the access to use -r, --recursive Perform a recursive copy -t, --transfers int Controls how many uploads/downloads to perform in parallel (default 1) --dry-run Print what operations would happen but don't execute them --progress Show a progress bar when possible (default true) -p, --parallelism int Controls how many parallel chunks to upload/download from a file (default 1) --expires relative_date Schedule removal after this time (e.g. '+2h', 'now', '2020-01-02T15:04:05Z0700') uplink cp cheesecake.jpg sj://cakes uplink cp sj://cakes/cheesecake.jpg ~/Downloads/ """ [[commands.subcommand.field]] id = "source" label = "Source" description = "Local path or sj://bucket/key." type = "string" position = 0 min = 1 sources = ["docs"] [[commands.subcommand.field]] id = "destination" label = "Destination" description = "Local path or sj://bucket/key." type = "string" position = 1 min = 1 sources = ["docs"] [[commands.subcommand.field]] id = "recursive" label = "Recursive" type = "boolean" option = ["--recursive", "-r"] sources = ["docs"] [[commands.subcommand.field]] id = "dry_run" label = "Dry run" type = "boolean" option = ["--dry-run"] sources = ["docs"] [[commands.subcommand.field]] 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"] [[commands.subcommand.field]] id = "transfers" label = "Parallel transfers" type = "integer" option = ["--transfers", "-t"] sources = ["docs"] [[commands.subcommand.field]] id = "parallelism" label = "Parallel chunks per file" type = "integer" option = ["--parallelism", "-p"] sources = ["docs"] [[commands.subcommand.field]] id = "expires" label = "Expire after" description = "Relative time such as +2h, or an ISO 8601 date." type = "string" option = ["--expires"] sources = ["docs"] [[commands.subcommand.task]] id = "upload" label = "Upload" fields = ["source", "destination", "recursive", "expires"] required = ["source", "destination"] [[commands.subcommand.task]] id = "download" label = "Download" fields = ["source", "destination", "recursive", "parallelism"] required = ["source", "destination"] [[commands.subcommand.task]] id = "preview" label = "Dry run" fields = ["source", "destination", "recursive", "dry_run"] required = ["source", "destination", "dry_run"] set = { dry_run = [true] } [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["source", "destination", "recursive", "dry_run"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["access", "transfers", "parallelism", "expires"]