Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

sferik/x-cli

A command-line power tool for Twitter.

sferik/x-cli.json
{
"createdAt": "2011-11-23T02:59:48Z",
"defaultBranch": "main",
"description": "A command-line power tool for Twitter.",
"fullName": "sferik/x-cli",
"homepage": "https://sferik.github.io/t",
"language": "Ruby",
"name": "x-cli",
"pushedAt": "2026-06-15T01:18:39Z",
"stargazersCount": 5569,
"topics": [],
"updatedAt": "2026-06-17T12:58:45Z",
"url": "https://github.com/sferik/x-cli"
}

A command-line interface for the X API.

  • Full command tree with aliases and options
  • X API client library (x-api) for HTTP, auth, and retry primitives
  • OAuth 1.0a and OAuth 2.0 authentication
  • Automatic retry with backoff for transient API errors
  • V1.1 and V2 API support with automatic fallback
  • Streaming support for filtered and sampled streams
  • Column-aligned output formatting
  • YAML configuration file support
  • Bash completion support
  • Command families: cli, delete, list, search, set, stream
  • Local account/profile commands: accounts, set active, delete account, version, ruler
  • Stream commands use persistent HTTP streaming:
    • stream all and stream matrix use OAuth2 sample stream
    • stream search, stream users, stream list, and stream timeline use v2 filtered stream rules + stream
  • X_STREAM_MAX_EVENTS can be set to limit emitted events (useful for tests/automation)
  • Default profile config is ~/.xrc. If ~/.xrc is missing, ~/.trc is used as a read fallback and migrated on write.
Terminal window
cargo test
cargo run -- version
cargo run -- accounts --profile /path/to/.xrc

Tagging a new v* release triggers GitHub Actions to build and publish binaries for:

  • Linux (x86_64-unknown-linux-gnu)
  • Linux ARM64 (aarch64-unknown-linux-gnu)
  • macOS Intel (x86_64-apple-darwin)
  • macOS Apple Silicon (aarch64-apple-darwin)
  • Windows (x86_64-pc-windows-msvc)
  • Windows ARM64 (aarch64-pc-windows-msvc)

Install cargo-release:

Terminal window
cargo install cargo-release --locked

Then tag and push the current Cargo.toml version:

Terminal window
cargo release-tag

Tag messages come from Cargo.toml release metadata (tag-message).