A privacy-focused Twitter/X frontend written in Rust
Rust
67
163 commits
updated Oct 5, 2026
A privacy-focused Twitter/X frontend written in Rust.
cargo build --release
cp config/teapot.example.toml config/teapot.toml
Edit config/teapot.toml with your settings.
Create a sessions file with your Twitter/X credentials:
cp sessions.example.jsonl sessions.jsonl
# Edit sessions.jsonl with your auth_token and ct0 from browser cookies
Cookie sessions use auth_token and ct0. OAuth sessions use
oauth_token and oauth_secret. See sessions.example.jsonl for the JSONL
shape. Never commit a real session or generated teapot.toml.
# Development
cargo run
# Production
./target/release/teapot
The server will start on http://localhost:8080 by default.
To use the Twitter API, you need session tokens from a logged-in Twitter account:
auth_token and ct0sessions.jsonlteapot/
├── src/
│ ├── main.rs # Entry point
│ ├── config.rs # Configuration
│ ├── error.rs # Error types
│ ├── types/ # Data structures (User, Tweet, Timeline, etc.)
│ ├── api/ # Twitter API client, OAuth, parsing
│ ├── cache/ # In-process caching
│ ├── routes/ # HTTP route handlers
│ ├── views/ # Maud HTML templates
│ └── utils/ # Utilities (HMAC, formatters)
├── public/ # Static assets (CSS, JS, fonts)
├── config/ # Configuration files
└── Cargo.toml # Dependencies
This rewrite includes FxEmbed-style improvements for Discord embeds:
Discord can display all images from a tweet in a carousel. This works via an ActivityPub JSON endpoint at /users/{username}/statuses/{id} that returns media attachments.
Videos can be played directly in Discord embeds using twitter:player meta tags:
twitter:player - Embed URLtwitter:player:stream - Direct MP4 URLtwitter:player:width/height - DimensionsAll images include og:image:width and og:image:height meta tags for proper layout.
912 followers · starred Aug 2026
697 followers · starred Sep 2026
2,452 followers · starred Sep 2026
106 followers · starred Aug 2026
A privacy-focused Twitter/X frontend written in Rust
Rust
67
163 commits
updated Oct 5, 2026
A privacy-focused Twitter/X frontend written in Rust.
cargo build --release
cp config/teapot.example.toml config/teapot.toml
Edit config/teapot.toml with your settings.
Create a sessions file with your Twitter/X credentials:
cp sessions.example.jsonl sessions.jsonl
# Edit sessions.jsonl with your auth_token and ct0 from browser cookies
Cookie sessions use auth_token and ct0. OAuth sessions use
oauth_token and oauth_secret. See sessions.example.jsonl for the JSONL
shape. Never commit a real session or generated teapot.toml.
# Development
cargo run
# Production
./target/release/teapot
The server will start on http://localhost:8080 by default.
To use the Twitter API, you need session tokens from a logged-in Twitter account:
auth_token and ct0sessions.jsonlteapot/
├── src/
│ ├── main.rs # Entry point
│ ├── config.rs # Configuration
│ ├── error.rs # Error types
│ ├── types/ # Data structures (User, Tweet, Timeline, etc.)
│ ├── api/ # Twitter API client, OAuth, parsing
│ ├── cache/ # In-process caching
│ ├── routes/ # HTTP route handlers
│ ├── views/ # Maud HTML templates
│ └── utils/ # Utilities (HMAC, formatters)
├── public/ # Static assets (CSS, JS, fonts)
├── config/ # Configuration files
└── Cargo.toml # Dependencies
This rewrite includes FxEmbed-style improvements for Discord embeds:
Discord can display all images from a tweet in a carousel. This works via an ActivityPub JSON endpoint at /users/{username}/statuses/{id} that returns media attachments.
Videos can be played directly in Discord embeds using twitter:player meta tags:
twitter:player - Embed URLtwitter:player:stream - Direct MP4 URLtwitter:player:width/height - DimensionsAll images include og:image:width and og:image:height meta tags for proper layout.
912 followers · starred Aug 2026
697 followers · starred Sep 2026
2,452 followers · starred Sep 2026
106 followers · starred Aug 2026