Skip to content

About

File uploads for agents. Pin to IPFS, Arweave. E2E soon.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

92 Commits

Folders and files

Repository files navigation

Upload media to IPFS and Arweave. Pay with USDC. No accounts, no API keys — just a wallet.

pnpm add -g @objekt.sh/cli

Agent-ready

All commands return structured JSON. The CLI is discoverable by AI agents out of the box:

objekt --llms       # machine-readable command manifest
objekt --schema     # JSON Schema for every command

Agents can upload files, check pricing, and manage wallets without human intervention.


How it works

Two primitives power everything:

Open Wallet Standard (OWS) handles signing. Your private key is encrypted locally and never touches the network. Each upload is signed with an EIP-712 signature — the server verifies ownership without ever seeing your key.

x402 handles payments. It's an open protocol for machine-native payments over HTTP. When you upload to a paid storage tier, the CLI constructs a USDC payment on Base, the server settles it on-chain, and you get a transaction receipt. No intermediary holds your funds between request and settlement.


Quickstart

# Create a wallet
objekt wallet create my-wallet

# Check current pricing
objekt pricing

# Upload a file to IPFS (default)
objekt upload ./doc.pdf -w my-wallet

# Upload permanently to Arweave
objekt upload ./doc.pdf -w my-wallet --storage arweave

# Free CDN cache
objekt upload ./doc.pdf -w my-wallet --storage cdn

Wallets

Wallets are stored locally, encrypted at rest.

objekt wallet create <name>
objekt wallet import <name> --privateKey 0x...
objekt wallet list

The wallet address is a standard EVM address — the same key you use anywhere else on-chain.


Uploading

objekt upload <file> -w <wallet> [-k <key>] [--storage cdn|arweave|ipfs]

file is the path to upload. --key overrides the storage key (defaults to the filename).

Storage tiers:

Tier Cost Durability
cdn Free 90-day Cloudflare edge cache
arweave Dynamic Permanent — one payment, stored forever
ipfs Dynamic 12-month pinning guarantee

Pricing is dynamic — Arweave tracks the live AR/USD rate. Check current rates:

objekt pricing

Estimate before committing:

objekt upload ./doc.pdf -w my-wallet --storage arweave --estimate

Response

Every upload returns a consistent shape:

{
  "name": "doc.pdf",
  "kind": "application/pdf",
  "bytes": 142087,
  "uri": "ar://BzIbGE9Nl6WqlyFo6wkCWAu9f0PnmuD3Sqk_2EWatu0",
  "permalink": "https://ar.objekt.sh/BzIbGE9Nl6WqlyFo6wkCWAu9f0PnmuD3Sqk_2EWatu0",
  "contenthash": "0xe301...",
  "payment": {
    "txHash": "0xfc88c3...",
    "explorerUrl": "https://basescan.org/tx/0xfc88c3..."
  }
}
Field Description
uri Protocol URI (ar://, ipfs://) — omitted for CDN
permalink Gateway URL to access the content
contenthash ENSIP-7 hex-encoded contenthash — set this on your ENS name
payment On-chain USDC receipt — omitted for free CDN tier

Permalinks resolve to your content via objekt.sh gateways:

  • ar.objekt.sh/:txId — Arweave content
  • ipfs.objekt.sh/:cid — IPFS content
  • api.objekt.sh/:key — CDN cache

Retrieving

objekt get <key>
objekt get <key> --output ./file.pdf

Deploy static sites

Deploy a directory as a temporary preview site or pin to IPFS for permanent hosting.

# Temporary preview (7 days, free)
objekt deploy ./dist -w my-wallet

# Pin to IPFS (permanent, paid via x402)
objekt deploy ./dist -w my-wallet --storage ipfs
Storage Cost Durability
tmp (default) Free 7-day preview on Cloudflare edge
ipfs Dynamic Permanent IPFS pin via x402 payment

Temporary deploys get a cute URL like https://tmp.objekt.sh/calm-fox-k7m/. IPFS deploys also return a contenthash you can set on your ENS name — the CLI will show you the exact command.


ENS

Upload avatars and header images for ENS names:

objekt ens avatar upload 1a35e1.eth -f ./avatar.png -w my-wallet --storage arweave

Contenthash

Read or set the ENSIP-7 contenthash on any ENS name. Use this to point your ENS name to a website on IPFS.

# Read
objekt ens contenthash get vitalik.eth

# Set (requires ENS name ownership + ETH for gas)
objekt ens contenthash set myname.eth "ipfs://QmRootCID" -w my-wallet

Full website deploy flow

# 1. Deploy site to IPFS
objekt deploy ./dist -w my-wallet --storage ipfs
# Returns: uri: ipfs://QmRootCID, contenthash: 0xe301...

# 2. Set contenthash on your ENS name
objekt ens contenthash set myname.eth "ipfs://QmRootCID" -w my-wallet

# 3. Visit myname.eth.limo

Testing

Use --testnet to test against the staging environment. Payments settle in USDC on Base Sepolia.

Get testnet USDC from the Circle faucet.

objekt upload ./doc.pdf -w my-wallet --storage ipfs --testnet

Networks

--network mainnet (default) or --network sepolia for ENS on testnet.


License

AGPL-3.0

About

File uploads for agents. Pin to IPFS, Arweave. E2E soon.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages