A Ruby script to auto-delete posts from your Bluesky account.
- 🗑️ Automatically deletes posts older than a specified number of days (default: 90 days)
- 🔄 Deletes reposts by default (can be disabled)
- 👍 Option to delete likes (disabled by default)
- 🔍 Default dry-run mode previews what would be deleted
- ⚡ Configurable timeframe
- 🔐 Secure authentication using Bluesky app passwords
- 📊 Progress tracking and detailed output
- Ruby 3.0 or higher
- A Bluesky account
- A Bluesky app password (generate one at bsky.app/settings/app-passwords)
-
Clone or download this repository
-
Install dependencies:
bundle install
-
Make the script executable:
chmod +x vanillasky.rb
./vanillasky.rb --help
./vanillasky.rb
./vanillasky.rb --force
./vanillasky.rb --days 30 --force
./vanillasky.rb --likes --force
./vanillasky.rb --only-likes --force
./vanillasky.rb --no-reposts --force
When you run the script, you'll be prompted for:
- Your Bluesky handle (e.g.,
username.bsky.social
) - Your app password (not your main account password!)
Important: Use an app password, not your main account password. You can create app passwords in your Bluesky settings.
- 🔒 Uses app passwords for secure authentication
- 🛡️ Dry-run mode by default - you must use
--force
to actually delete ⚠️ Confirmation prompt before deletion (unless in dry-run mode)- 🔍 Preview deletions before committing
- ⏱️ Rate limiting to avoid API issues
- 📋 Detailed logging of what's being deleted
🌌 VanillaSky - Bluesky Post Auto-Deletion Tool
=============================================
Enter your Bluesky handle (e.g., user.bsky.social): alice.bsky.social
Enter your app password:
✅ Successfully authenticated as alice.bsky.social
🔍 Scanning for posts older than 2024-02-25...
....
📋 Found 15 posts older than 90 days
⚠️ This will permanently delete these posts. Continue? (y/N) y
🗑️ Deleted (1/15): 2024-01-15 - Just tried that new coffee shop downtown...
🗑️ Deleted (2/15): 2024-01-10 - Beautiful sunset today! 📸
...
✅ Successfully deleted 15 out of 15 posts
Note: The above example shows output when using --force
. Without the force flag, you'll see a dry-run preview instead.
-d, --days DAYS
: Delete posts older than DAYS (default: 90)-n, --dry-run
: Show what would be deleted without actually deleting (default)-f, --force
: Actually delete posts (required to disable dry-run mode)--no-reposts
: Don't delete reposts (by default, reposts are deleted)--likes
: Also delete likes (by default, likes are not deleted)--only-likes
: Only delete likes (don't delete posts)-h, --help
: Show help message
- Authentication: Connects to Bluesky using your handle and app password
- Scanning: Fetches your posts in batches, checking creation dates
- Filtering: Identifies posts older than the specified threshold
- Confirmation: Asks for confirmation before deletion (unless dry-run)
- Deletion: Removes old posts one by one with rate limiting
- Your credentials are only used for the current session and are not stored
- The script uses HTTPS for all API communications
- App passwords have limited scope compared to your main password
- You can revoke app passwords at any time from your Bluesky settings
- Processes content sequentially to respect rate limits
- Requires manual confirmation for each run (safety feature)
Feel free to open issues or submit pull requests if you find bugs or have suggestions for improvements.
This project is licensed under the MIT License - see the LICENSE file for details.
Disclaimer: This tool permanently deletes your posts. Always test with --dry-run
first and use at your own risk.