Skip to main content

general-purpose cli for atproto record operations

Project description

pdsx

general-purpose cli for atproto record operations

📚 documentation

installation

uv add pdsx
# or
uvx pdsx --help

quick start

important: flags like -r, --handle, --password go BEFORE the command (ls, get, etc.)

# read anyone's posts (no auth needed)
uvx pdsx -r zzstoatzz.io ls app.bsky.feed.post -o json | jq -r '.[].text'

# update your bio (requires auth)
export ATPROTO_HANDLE=your.handle ATPROTO_PASSWORD=your-app-password
uvx pdsx edit app.bsky.actor.profile/self description='new bio'

features

  • crud operations for atproto records (list, get, create, update, delete)
  • blob upload: upload images, videos, and other binary content
  • cursor pagination: paginate through large collections
  • optional auth: reads with --repo flag don't require authentication
  • shorthand URIs: use app.bsky.feed.post/abc123 when authenticated
  • multiple output formats: compact (default), json, yaml, table
  • unix-style aliases: ls, cat, rm, edit, touch/add
  • jq-friendly json output
  • python 3.10+, type-safe
usage examples

read operations (no auth with -r)

# list records from any repo (note: -r goes BEFORE ls)
pdsx -r zzstoatzz.io ls app.bsky.feed.post --limit 5 -o json

# read someone's bio
pdsx -r zzstoatzz.io ls app.bsky.actor.profile -o json | jq -r '.[0].description'

pagination

# get first page (note: -r before ls, --cursor after)
pdsx -r zzstoatzz.io ls app.bsky.feed.post --limit 10

# output includes cursor if more pages exist:
# next page cursor: 3lyqmkpiprs2w

# get next page
pdsx -r zzstoatzz.io ls app.bsky.feed.post --limit 10 --cursor 3lyqmkpiprs2w

blob upload (auth required)

# upload an image
pdsx upload-blob ./photo.jpg

# returns blob reference like:
# {
#   "$type": "blob",
#   "ref": {"$link": "bafkreif..."},
#   "mimeType": "image/jpeg",
#   "size": 123456
# }

# use blob reference in records (e.g., create post with image)
# copy the blob reference output and use it in your record creation

write operations (auth required)

# update using shorthand URI
pdsx edit app.bsky.actor.profile/self description='new bio'

# delete using shorthand URI
pdsx rm app.bsky.feed.post/abc123

# create a record
pdsx create app.bsky.feed.like subject='at://...' createdAt='2024-01-01T00:00:00Z'

note: when authenticated, use shorthand URIs (collection/rkey) instead of full AT-URIs (at://did:plc:.../collection/rkey)

output formats

compact (default)

app.bsky.feed.post (3 records)
3m4ryxwq5dt2i: {"created_at":"2025-11-04T07:25:17.061883+00:00","text":"..."}

json

pdsx ls app.bsky.feed.post -o json | jq '.[].text'

table

pdsx ls app.bsky.feed.post -o table
development
git clone https://github.com/zzstoatzz/pdsx
cd pdsx
uv sync
uv run pytest
uv run ty check

license

mit

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pdsx-0.0.1a7.tar.gz (91.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pdsx-0.0.1a7-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file pdsx-0.0.1a7.tar.gz.

File metadata

  • Download URL: pdsx-0.0.1a7.tar.gz
  • Upload date:
  • Size: 91.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.8

File hashes

Hashes for pdsx-0.0.1a7.tar.gz
Algorithm Hash digest
SHA256 67ff4761300659b6d6bb7e5206c404823fc23425f656996b6744009691fb675c
MD5 af1975545e08495c8b2f64e3978dead5
BLAKE2b-256 d78e17e0e56439c580b6c2976c16f09685ddd6a329c4c0a3ee477b5b9497ac23

See more details on using hashes here.

File details

Details for the file pdsx-0.0.1a7-py3-none-any.whl.

File metadata

  • Download URL: pdsx-0.0.1a7-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.8

File hashes

Hashes for pdsx-0.0.1a7-py3-none-any.whl
Algorithm Hash digest
SHA256 a4dbf4fa08cf1008b7861ca9a9a4f5a1c09e952f3742b0f09e90737c9b114175
MD5 a238e97eccff6f6fa3898577f934a847
BLAKE2b-256 fa89d7d7450f22d0e11b54dbbecbc68a99604af9bdb330f35c6f83d63fe9aaac

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page