A beautiful terminal social client for Mastodon and Bluesky
Read, post, and engage across social networks β all from your terminal.
- β¨ Features
- πΈ Screenshots
- π Quick Start
- π Authentication
- π» Usage
- β¨οΈ Keybindings
- π¨ Themes
- βοΈ Configuration
- ποΈ Architecture
- π§ Building from Source
- π€ Contributing
- π License
|
Full OAuth authentication with any instance. Browse timelines, post, reply, like, and boost. AT Protocol support with app passwords. Stay connected to the decentralized social web. Write once, post to multiple networks simultaneously. Perfect for maintaining presence everywhere. |
Gorgeous three-panel terminal interface with vim keybindings and real-time updates. Script your social media with comprehensive commands. Automate posts, fetch timelines, manage accounts. Credentials stored safely in your system keyring. Never worry about plaintext tokens. |
| Feature | Description |
|---|---|
| π Timeline Filtering | View all posts or filter by network |
| πΎ Offline Cache | SQLite-backed cache for offline reading |
| π¨ 15 Built-in Themes | From Dracula to Cyberpunk |
| β¨οΈ Vim Keybindings | Navigate like a pro |
| π Draft Support | Save drafts for later |
| π Scheduled Posts | Queue posts for optimal timing |
| π Notifications | Desktop alerts for mentions |
| πΌοΈ Media Support | Attach images to posts |
# Homebrew (recommended - fast, pre-built binary)
brew install ricardodantas/tap/perch# Homebrew (recommended)
brew install ricardodantas/tap/perch
# Or via Cargo
cargo install perch# Via Cargo (requires Rust toolchain)
cargo install perchOr download perch-*-x86_64-pc-windows-msvc.zip from GitHub Releases.
git clone https://github.com/ricardodantas/perch
cd perch
cargo install --path .- Add a Mastodon account:
perch auth mastodon mastodon.social- Or add a Bluesky account:
perch auth bluesky- Launch the TUI:
perchperch auth mastodon <instance>This will:
- Register Perch with your Mastodon instance
- Open your browser for authorization
- Ask you to paste the authorization code
- Store credentials securely in your system keyring
Examples:
perch auth mastodon mastodon.social
perch auth mastodon fosstodon.org
perch auth mastodon hachyderm.ioperch auth blueskyYou'll need an App Password from Bluesky settings.
Note: App passwords are more secure than your main password β they can be revoked individually and don't have full account access.
perchLaunch the beautiful terminal interface with three-panel layout:
- Left panel: Accounts and filters
- Center panel: Timeline/feed
- Right panel: Post details and media
# Post to all configured networks
perch post "Hello world!"
# Post to specific networks
perch post "Hello Fediverse!" --to mastodon
perch post "Hello everyone!" --to mastodon,bluesky
# Post with content warning
perch post "Spoiler content" --cw "Movie spoilers"
# Post with media
perch post "Check this out!" --media ~/photo.jpg# Schedule a post for later
perch post "Good morning!" --schedule "in 2h"
perch post "Happy Friday!" --schedule "YYYY-MM-DD HH:MM" --to mastodon,bluesky
# List pending scheduled posts
perch schedule list
# Cancel a scheduled post
perch schedule cancel abc123
# Process due scheduled posts (one-time)
perch schedule run
# Run scheduler daemon (continuous)
perch schedule daemon
perch schedule daemon --interval 30 # Check every 30 secondsSchedule time formats:
- Relative:
"in 5m","in 2h","in 1d","in 30 minutes" - Time today:
"15:00","3pm"(schedules for tomorrow if past) - Date+time:
"YYYY-MM-DD HH:MM","YYYY-MM-DDTHH:MM"
TUI Scheduling:
In the compose dialog (n), press Tab to switch to the schedule input field. Type your schedule time and it validates in real-time. Press Tab or Enter to confirm, F4 to clear.
# View home timeline (all networks)
perch timeline
# View specific network
perch timeline mastodon
perch timeline bluesky
# Limit posts
perch timeline --limit 50# List all accounts
perch accounts
# Remove an account
perch accounts remove <account-id>| Key | Action |
|---|---|
Tab |
Switch panel |
? / F1 |
Show help |
t |
Change theme |
q |
Quit |
Ctrl+c |
Force quit |
| Key | Action |
|---|---|
β / k |
Move up |
β / j |
Move down |
g / Home |
Go to first item |
G / End |
Go to last item |
PageUp |
Page up |
PageDown |
Page down |
| Key | Action |
|---|---|
r |
Refresh timeline |
f |
Cycle filter (All/Mastodon/Bluesky) |
Enter |
View post details |
o |
Open in browser |
l |
Like/favorite |
b |
Boost/repost |
R |
Reply to post |
| Key | Action |
|---|---|
n |
New post |
Ctrl+Enter |
Send post |
Alt+1 |
Toggle Mastodon |
Alt+2 |
Toggle Bluesky |
Esc |
Cancel |
Perch includes 15 beautiful themes based on popular terminal and editor color schemes.
Press t in the TUI to cycle through themes.
| Theme | Description |
|---|---|
| π¦ Dracula | Dark purple aesthetic (default) |
| π One Dark Pro | Atom's iconic dark theme |
| βοΈ Nord | Arctic, bluish color palette |
| π± Catppuccin Mocha | Warm pastel dark theme |
| β Catppuccin Latte | Warm pastel light theme |
| πΈ Gruvbox Dark | Retro groove colors |
| π Gruvbox Light | Retro groove, light variant |
| π Tokyo Night | Futuristic dark blue |
| π Solarized Dark | Precision colors, dark |
| π Solarized Light | Precision colors, light |
| π¨ Monokai Pro | Classic syntax highlighting |
| πΉ RosΓ© Pine | All natural pine with soho vibes |
| π Kanagawa | Inspired by Katsushika Hokusai |
| π² Everforest | Comfortable green forest theme |
| π Cyberpunk | Neon-soaked futuristic theme |
Perch uses TOML for configuration. The config file is located at:
~/.config/perch/config.toml
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Display Settings
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Theme (dracula, nord, catppuccin-mocha, etc.)
theme = "dracula"
# Enable vim-like keybindings
vim_mode = true
# Show media previews (when supported)
show_media = true
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Timeline Settings
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Default timeline view
default_timeline = "home"
# Number of posts to fetch
post_limit = 50
# Auto-refresh interval in seconds (0 = manual only)
refresh_interval_secs = 0
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Posting Settings
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Default visibility for posts
# Options: public, unlisted, private, direct
default_visibility = "public"
# Default networks to post to (when using CLI without --to)
default_networks = ["mastodon", "bluesky"]βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
β perch (TUI) β β perch (CLI) β
β β’ Browse timelines β β β’ perch post β
β β’ Compose posts β β β’ perch timeline β
β β’ Like & boost β β β’ perch accounts β
β β’ Switch themes β β β’ Scriptable commands β
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
β β
βββββββββββββββββ¬ββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Core Library β
β β’ api/mastodon.rs β Mastodon OAuth + API β
β β’ api/bluesky.rs β AT Protocol integration β
β β’ auth/ β System keyring storage β
β β’ db.rs β SQLite cache & drafts β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
β π Mastodon API β β π¦ Bluesky API β
β (Any instance) β β (bsky.social) β
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
perch/
βββ src/
β βββ api/ # Network API clients
β β βββ mod.rs # Unified SocialApi trait
β β βββ mastodon.rs # Mastodon OAuth + REST
β β βββ bluesky.rs # AT Protocol client
β βββ app/ # TUI application
β β βββ mod.rs
β β βββ state.rs # Application state
β β βββ events.rs # Key event handling
β β βββ ui.rs # UI rendering
β βββ auth/ # Credential storage
β β βββ mod.rs # System keyring
β βββ models/ # Data models
β β βββ mod.rs
β β βββ account.rs
β β βββ network.rs
β β βββ post.rs
β βββ config.rs # Configuration loading
β βββ db.rs # SQLite database
β βββ theme.rs # Color themes
β βββ lib.rs # Library root
β βββ main.rs # Entry point
βββ Cargo.toml
βββ LICENSE
- Rust 1.85+
- Linux, macOS, or Windows
# Clone the repository
git clone https://github.com/ricardodantas/perch
cd perch
# Build release binary
cargo build --release
# The binary will be at:
# target/release/perch
# Or install directly
cargo install --path .# Run in development
cargo run
# Run tests
cargo test
# Run linter
cargo clippy
# Format code
cargo fmtContributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
cargo test - Run clippy:
cargo clippy - Format:
cargo fmt - Commit:
git commit -m "Add amazing feature" - Push:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License β see the LICENSE file for details.
Built with π¦ Rust and β€οΈ by Ricardo Dantas





