general-purpose cli for atproto record operations
Project description
pdsx
general-purpose cli for atproto record operations
installation
uv add pdsx
# or
uvx pdsx --help
quick start
# read anyone's posts (no auth)
uvx pdsx -r did:plc:o53crari67ge7bvbv273lxln ls app.bsky.feed.post -o json | jq -r '.[].text'
# update your bio (with auth)
export ATPROTO_HANDLE=your.handle ATPROTO_PASSWORD=your-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
--repoflag don't require authentication - shorthand URIs: use
app.bsky.feed.post/abc123when 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 --repo)
# list records from any repo
pdsx -r did:plc:... ls app.bsky.feed.post --limit 5 -o json
# read someone's bio
pdsx -r did:plc:o53crari67ge7bvbv273lxln ls app.bsky.actor.profile -o json | jq -r '.[0].description'
pagination
# get first page of posts
pdsx -r jlowin.dev ls app.bsky.feed.post --limit 10
# output includes cursor if more pages exist:
# next page cursor: 3lyqmkpiprs2w
# get next page using cursor
pdsx -r jlowin.dev 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
Release history Release notifications | RSS feed
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.1a3.tar.gz
(81.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
pdsx-0.0.1a3-py3-none-any.whl
(13.1 kB
view details)
File details
Details for the file pdsx-0.0.1a3.tar.gz.
File metadata
- Download URL: pdsx-0.0.1a3.tar.gz
- Upload date:
- Size: 81.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b4012008593b1fc22940bcc5b72e619db9685dd066baecfea929bccc1b227aa
|
|
| MD5 |
14995709f9063cbda387ae05c6c1070d
|
|
| BLAKE2b-256 |
1398ab0779c88a299fe48fef1d596480fa3b48fd6fbe0f14e6e52d75767fc28c
|
File details
Details for the file pdsx-0.0.1a3-py3-none-any.whl.
File metadata
- Download URL: pdsx-0.0.1a3-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a6bdbffe020171a78c3b6553b3705c4f717abac50489d544a9fbe9e86af4bdc
|
|
| MD5 |
2cb53cb08b22dd2545e45ad9f6513116
|
|
| BLAKE2b-256 |
34e26271314b5f7e6c978a06cced2ffd75d6881674d74d8c934d0da79d450297
|