Skip to content

Storj

Storj is a decentralized cloud storage provider.

Description

It offers S3-compatible storage that is distributed across thousands of nodes worldwide, providing high reliability and security.

When to use it

  • When you need high-performance, decentralized object storage.
  • When you want to reduce storage costs compared to traditional cloud providers.
  • When building applications that require S3 compatibility.

When not to use it

  • When you require block storage or file system mounting (use for object storage).
  • If your workload requires absolute single-region data residency.

Getting started

Docker installation

Running a Storj node via Docker allows you to contribute storage to the network and earn rewards.

docker run -d --restart unless-stopped --stop-timeout 300 \
  -p 28967:28967/tcp \
  -p 28967:28967/udp \
  -p 127.0.0.1:14002:14002 \
  -e WALLET="0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -e EMAIL="user@example.com" \
  -e ADDRESS="domain.ddns.net:28967" \
  -e STORAGE="2TB" \
  --mount type=bind,source="/path/to/identity",target=/app/identity \
  --mount type=bind,source="/path/to/storage",target=/app/config \
  --name storagenode storjlabs/storagenode:latest

Installation

Install the uplink CLI tool to manage your Storj buckets and objects:

curl -L https://github.com/storj/storj/releases/latest/download/uplink_linux_amd64.zip -o uplink.zip
unzip uplink.zip
sudo install uplink /usr/local/bin

Setup

Configure the CLI with your Storj access credentials:

uplink setup

Follow the prompts to enter your access grant or API key.

Hello World

  1. Install and setup the uplink CLI as described above.
  2. Create a new bucket: uplink mb sj://hello-world.
  3. Create a small text file: echo "Hello Storj" > hello.txt.
  4. Upload the file: uplink cp hello.txt sj://hello-world/.
  5. Verify the upload: uplink ls sj://hello-world/.

CLI examples

The uplink tool supports standard object storage operations. Use the sj:// protocol for buckets.

# Create a new bucket
uplink mb sj://my-bucket

# Upload a local file with a custom expiration date
uplink cp my-local-file.txt sj://my-bucket/ --expires 2026-12-31T23:59:59Z

# List objects and their sizes in a bucket
uplink ls sj://my-bucket/

# Share a specific path with a new access grant
uplink share sj://my-bucket/public-folder/ --readonly --not-after 2026-12-31T23:59:59Z

API examples

Use the boto3 library to interact with Storj via its S3-compatible Gateway.

Python (Boto3)

import boto3

# Configure the client for Storj S3 Gateway
s3 = boto3.client(
    "s3",
    endpoint_url="https://gateway.storjshare.io",
    aws_access_key_id="<your_access_key>",
    aws_secret_access_key="<your_secret_key>"
)

# Upload a file
s3.upload_file("local_image.png", "my-bucket", "cloud_image.png")

# List objects in a bucket
response = s3.list_objects_v2(Bucket="my-bucket")
for obj in response.get("Contents", []):
    print(f"Object: {obj['Key']}, Size: {obj['Size']} bytes")

Backlog

  • Configure as a backup target for Rclone.

Contribution Metadata

  • Confidence: high
  • Last reviewed: 2026-06-12

Sources / References

  • https://www.storj.io/
  • https://aws.amazon.com/s3/
  • https://www.backblaze.com/cloud-storage
  • https://docs.storj.io/