โจ Features
- ๐ Create drafts with rich content, tags, and media attachments
- ๐งต Thread support with simple
---separators - ๐ Schedule posts for specific times or the next free slot
- ๐ Multi-platform publishing (X, LinkedIn, Threads, Bluesky, Mastodon)
- ๐ผ๏ธ Media uploads with automatic S3 presigned URL handling
- ๐ท๏ธ Tag management for organizing your content
- ๐ Flexible output with human-friendly tables or JSON
- ๐ Secure API key handling (never logged or displayed)
- โก Fast async runtime powered by tokio
๐ฆ Installation
Homebrew
From crates.io
From source
๐ Quick Start
# 1. Set up your API key and default social set
# 2. Verify authentication
# 3. Create your first draft
# 4. Publish it immediately
โ๏ธ Configuration
Interactive Setup
The easiest way to get started:
This prompts for your API key and lets you pick a default social set from your account.
Manual Setup
Create ~/.config/typefully/config.toml:
= "your-api-key-here"
= "your-social-set-id"
API Key Precedence
The CLI looks for your API key in this order:
--api-keycommand-line flagTYPEFULLY_API_KEYenvironment variable~/.config/typefully/config.tomlfile
๐ Command Reference
Authentication
Verify your API key and display account information:
Social Sets
List all social sets with their connected platforms:
Drafts
Create a Draft
# Simple draft (saved as draft, not published)
# Pipe content from stdin
|
# Publish immediately
# Schedule for the next free slot
# Schedule for a specific time (ISO-8601)
# Add tags
# Attach uploaded media
# Target specific platforms
# Post to multiple platforms
# Use a specific social set
Create a Thread
Split your content into multiple posts using --- on its own line:
You can also pipe a thread from a file:
|
Where my-thread.txt contains:
First post of the thread.
---
Second post with more detail.
---
Final post with a call to action!
List Drafts
# List recent drafts (default: 20)
# Filter by status
# Filter by tag
# Custom sorting
# Pagination
# Combine filters
Get a Draft
Edit a Draft
# Update content
# Reschedule
# Update tags
# Toggle sharing
Delete a Draft
# With confirmation prompt
# Skip confirmation
Publish Immediately
A shortcut to publish a draft right now:
Schedule a Draft
# Schedule for the next free slot
# Schedule for a specific time
Media
Upload Workflow
Media uploads use a three-step process (handled automatically by the CLI):
- Request a presigned upload URL from Typefully
- Upload the file to S3
- Poll until processing is complete
# Upload an image
# Upload and get the media ID as JSON (useful for scripting)
# Then attach it to a draft
Supported formats: PNG, JPEG, GIF, WebP, MP4.
Tags
List Tags
Create a Tag
Self-Update
Update typefully to the latest version. Automatically detects whether you installed via Homebrew or cargo:
๐ Global Flags
These flags work with every command:
| Flag | Description |
|---|---|
--json |
Output raw JSON to stdout |
--no-color |
Disable colored output (also respects NO_COLOR env) |
-q, --quiet |
Minimal output (only errors) |
-v, --verbose |
Debug logging to stderr |
--api-key <key> |
Override the API key for this invocation |
-h, --help |
Show help text |
--version |
Show version |
๐ข Exit Codes
| Code | Meaning |
|---|---|
0 |
Success |
1 |
API error or runtime error |
2 |
Invalid usage (bad flags, missing arguments) |
๐ง Scripting Examples
# List scheduled draft IDs as plain text
|
# Publish all drafts tagged "ready"
for; do
done
# Upload media and create a draft in one pipeline
MEDIA_ID=
๐ค Contributing
Contributions are welcome! Please read the following before submitting a PR:
- Read
AGENTS.mdfor project conventions and architecture - Rust 2024 edition with MSRV 1.91
- All checks must pass:
- Follow existing patterns: trait-based API client, thiserror for errors, tracing for logging
- Add doc comments on all public items
- No em dashes in any text content
๐ License
This project is licensed under the GNU General Public License v3.0.