10 releases
Uses new Rust 2024
| 0.3.3 | Feb 28, 2026 |
|---|---|
| 0.3.2 | Feb 21, 2026 |
| 0.2.5 | Feb 9, 2026 |
| 0.1.0 | Feb 8, 2026 |
#1751 in Command line utilities
6.5MB
9K
SLoC
π¦ Perch
A beautiful terminal social client for Mastodon and Bluesky
Read, post, and engage across social networks β all from your terminal.
π Table of Contents
- β¨ Features
- πΈ Screenshots
- π Quick Start
- π Authentication
- π» Usage
- β¨οΈ Keybindings
- π¨ Themes
- βοΈ Configuration
- ποΈ Architecture
- π§ Building from Source
- π€ Contributing
- π License
β¨ Features
π Mastodon IntegrationFull OAuth authentication with any instance. Browse timelines, post, reply, like, and boost. π¦ Bluesky IntegrationAT Protocol support with app passwords. Stay connected to the decentralized social web. π Cross-PostingWrite once, post to multiple networks simultaneously. Perfect for maintaining presence everywhere. |
π₯οΈ Beautiful TUIGorgeous three-panel terminal interface with vim keybindings and real-time updates. β‘ Powerful CLIScript your social media with comprehensive commands. Automate posts, fetch timelines, manage accounts. π Secure StorageCredentials stored safely in your system keyring. Never worry about plaintext tokens. |
Feature Highlights
| 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 |
πΈ Screenshots
Timeline View β Browse posts from all your networks
Compose Post β Write once, post everywhere
Accounts β Manage your connected accounts
Keyboard Shortcuts β Vim-style navigation
Theme Picker β 15 beautiful themes
About β Version info and links
π Quick Start
Installation
macOS
# Homebrew (recommended - fast, pre-built binary)
brew install ricardodantas/tap/perch
Linux
# Homebrew (recommended)
brew install ricardodantas/tap/perch
# Or via Cargo
cargo install perch
Windows
# Via Cargo (requires Rust toolchain)
cargo install perch
Or download perch-*-x86_64-pc-windows-msvc.zip from GitHub Releases.
From Source
git clone https://github.com/ricardodantas/perch
cd perch
cargo install --path .
First Run
- Add a Mastodon account:
perch auth mastodon mastodon.social
- Or add a Bluesky account:
perch auth bluesky
- Launch the TUI:
perch
π Authentication
Mastodon (OAuth)
perch 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.io
Bluesky (App Password)
perch auth bluesky
You'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.
π» Usage
TUI Mode
perch
Launch the beautiful terminal interface with three-panel layout:
- Left panel: Accounts and filters
- Center panel: Timeline/feed
- Right panel: Post details and media
CLI Commands
Posting
# 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
Scheduled Posts
# 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 seconds
Schedule 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.
Timeline
# View home timeline (all networks)
perch timeline
# View specific network
perch timeline mastodon
perch timeline bluesky
# Limit posts
perch timeline --limit 50
Account Management
# List all accounts
perch accounts
# Remove an account
perch accounts remove <account-id>
β¨οΈ Keybindings
Global
| Key | Action |
|---|---|
Tab |
Switch panel |
? / F1 |
Show help |
t |
Change theme |
q |
Quit |
Ctrl+c |
Force quit |
Navigation
| 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 |
Timeline View
| 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 |
Compose
| Key | Action |
|---|---|
n |
New post |
Ctrl+Enter |
Send post |
Alt+1 |
Toggle Mastodon |
Alt+2 |
Toggle Bluesky |
Esc |
Cancel |
π¨ Themes
Perch includes 15 beautiful themes based on popular terminal and editor color schemes.
Press t in the TUI to cycle through themes.
Available 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 |
βοΈ Configuration
Perch uses TOML for configuration. The config file is located at:
~/.config/perch/config.toml
Full Configuration Example
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 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"]
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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) β
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββ
Project Structure
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
π§ Building from Source
Requirements
- Rust 1.85+
- Linux, macOS, or Windows
Build
# 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 .
Development
# Run in development
cargo run
# Run tests
cargo test
# Run linter
cargo clippy
# Format code
cargo fmt
π€ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Quick Start for Contributors
- 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
π License
This project is licensed under the GPL-3.0-or-later license β see the LICENSE file for details.
Built with π¦ Rust and β€οΈ by Ricardo Dantas
Dependencies
~71β115MB
~1.5M SLoC