PERCH(1)

NAME

perch โ€” A beautiful terminal social client for Mastodon and Bluesky ๐Ÿฆ

SYNOPSIS

$brew install ricardodantas/tap/perch

INFO

71 stars
0 views

DESCRIPTION

A beautiful terminal social client for Mastodon and Bluesky ๐Ÿฆ

README

Perch Timeline

๐Ÿฆ Perch

A beautiful terminal social client for Mastodon and Bluesky

Read, post, and engage across social networks โ€” all from your terminal.

Release Crates.io CI License Rust Version


๐Ÿ“– Table of Contents


โœจ Features

๐Ÿ˜ Mastodon Integration

Full OAuth authentication with any instance. Browse timelines, post, reply, like, and boost.

๐Ÿฆ‹ Bluesky Integration

AT Protocol support with app passwords. Stay connected to the decentralized social web.

๐Ÿ“ Cross-Posting

Write once, post to multiple networks simultaneously. Perfect for maintaining presence everywhere.

๐Ÿ–ฅ๏ธ Beautiful TUI

Gorgeous three-panel terminal interface with vim keybindings and real-time updates.

โšก Powerful CLI

Script your social media with comprehensive commands. Automate posts, fetch timelines, manage accounts.

๐Ÿ” Secure Storage

Credentials stored safely in your system keyring. Never worry about plaintext tokens.


Feature Highlights

FeatureDescription
๐Ÿ” Timeline FilteringView all posts or filter by network
๐Ÿ’พ Offline CacheSQLite-backed cache for offline reading
๐ŸŽจ 15 Built-in ThemesFrom Dracula to Cyberpunk
โŒจ๏ธ Vim KeybindingsNavigate like a pro
๐Ÿ“‹ Draft SupportSave drafts for later
๐Ÿ“… Scheduled PostsQueue posts for optimal timing
๐Ÿ”” NotificationsDesktop alerts for mentions
๐Ÿ–ผ๏ธ Media SupportAttach images to posts

๐Ÿ“ธ Screenshots

Timeline View โ€” Browse posts from all your networks
Timeline View
Compose Post โ€” Write once, post everywhere
Compose Dialog
Accounts โ€” Manage your connected accounts
Accounts View
Keyboard Shortcuts โ€” Vim-style navigation
Help Dialog
Theme Picker โ€” 15 beautiful themes
Theme Picker
About โ€” Version info and links
About Dialog

๐Ÿš€ 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

  1. Add a Mastodon account:
perch auth mastodon mastodon.social
  1. Or add a Bluesky account:
perch auth bluesky
  1. Launch the TUI:
perch

๐Ÿ” Authentication

Mastodon (OAuth)

perch auth mastodon <instance>

This will:

  1. Register Perch with your Mastodon instance
  2. Open your browser for authorization
  3. Ask you to paste the authorization code
  4. 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

KeyAction
TabSwitch panel
? / F1Show help
tChange theme
qQuit
Ctrl+cForce quit

Navigation

KeyAction
โ†‘ / kMove up
โ†“ / jMove down
g / HomeGo to first item
G / EndGo to last item
PageUpPage up
PageDownPage down

Timeline View

KeyAction
rRefresh timeline
fCycle filter (All/Mastodon/Bluesky)
EnterView post details
oOpen in browser
lLike/favorite
bBoost/repost
RReply to post

Compose

KeyAction
nNew post
Ctrl+EnterSend post
Alt+1Toggle Mastodon
Alt+2Toggle Bluesky
EscCancel

๐ŸŽจ 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

ThemeDescription
๐Ÿฆ‡ DraculaDark purple aesthetic (default)
๐ŸŒ™ One Dark ProAtom's iconic dark theme
โ„๏ธ NordArctic, bluish color palette
๐Ÿฑ Catppuccin MochaWarm pastel dark theme
โ˜• Catppuccin LatteWarm pastel light theme
๐ŸŽธ Gruvbox DarkRetro groove colors
๐Ÿ“œ Gruvbox LightRetro groove, light variant
๐ŸŒƒ Tokyo NightFuturistic dark blue
๐ŸŒ… Solarized DarkPrecision colors, dark
๐ŸŒž Solarized LightPrecision colors, light
๐ŸŽจ Monokai ProClassic syntax highlighting
๐ŸŒน Rosรฉ PineAll natural pine with soho vibes
๐ŸŒŠ KanagawaInspired by Katsushika Hokusai
๐ŸŒฒ EverforestComfortable green forest theme
๐ŸŒ† CyberpunkNeon-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

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes
  4. Run tests: cargo test
  5. Run clippy: cargo clippy
  6. Format: cargo fmt
  7. Commit: git commit -m "Add amazing feature"
  8. Push: git push origin feature/amazing-feature
  9. 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

SEE ALSO

clihub3/4/2026PERCH(1)