A fancy terminal client for Bluesky built with TypeScript and Ink (React for CLI).
- π Interactive timeline browsing with smooth scrolling
- βοΈ Compose and post updates
- β€οΈ Like and interact with posts
- β¨οΈ Advanced keyboard navigation (vim-style + page navigation)
- π Scrollable timeline that adapts to terminal size
- π¨ Beautiful terminal UI with colors
- π Secure credential storage (auto-login on next run)
- π Cross-platform support (Windows, macOS, Linux)
npm install
npm run buildnpm run devnpm startCreate a .env file based on .env.example:
BSKY_HANDLE=your.handle.bsky.social
BSKY_PASSWORD=your-app-password
BSKY_SERVICE=https://bsky.socialβ/βorj/k- Navigate posts one by onePageUp/PageDown- Navigate by pageg- Jump to top (first post)G- Jump to bottom (last post)l- Like/unlike selected postc- Compose new postp- View profile (coming soon)n- View notifications (coming soon)r- Refresh timelineL- Logout (clears saved credentials)q- Quit
Ctrl+D- Send postEsc- Cancel composition
- Framework: Ink (React for CLI)
- Language: TypeScript
- Bluesky SDK: @atproto/api
- UI Components: ink-text-input, ink-spinner, ink-select-input
- Styling: chalk for colors
- Date formatting: date-fns
src/
βββ components/ # React/Ink UI components
βββ services/ # Bluesky API service layer
βββ hooks/ # Custom React hooks
βββ utils/ # Utility functions
βββ index.tsx # Entry point
The client securely saves your authentication tokens after the first successful login:
- Windows:
%LOCALAPPDATA%\bsky-cli\credentials.json - macOS:
~/Library/Application Support/bsky-cli/credentials.json - Linux:
~/.config/bsky-cli/credentials.json
Credentials are stored with restricted permissions (owner read/write only) and will be automatically used on subsequent launches. Use the L key to logout and clear saved credentials.
- Thread viewing and replies
- User profiles and search
- Notifications with filtering
- Custom feeds support
- Real-time updates via WebSocket
- Media preview (ASCII art)
- Configuration preferences