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.1a5.tar.gz (82.4 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.1a5-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pdsx-0.0.1a5.tar.gz
Algorithm Hash digest
SHA256 bd852b1b1d437a3225724d16f24a0bba6fefb0f6045f42c5f12090f52654aea6
MD5 f6e7339b4c755ed7333be32b4165fe9f
BLAKE2b-256 8fe70c90ebda156543d4367d2bdd7bc991872cdc40633fab6649ad822b47972b

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pdsx-0.0.1a5-py3-none-any.whl
Algorithm Hash digest
SHA256 e920007bcb5facdd76260f9f5e8cddb95e74d7baa05fae60a5cb4e2c16d2279d
MD5 382a80ab3c71133f7dc0003ec1c5884b
BLAKE2b-256 4d4669f408a8b0be5aca2955b80590df278e70842eec2eca7f4c38a567d1cbbf

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