Crier: Cross-Post Your Content Everywhere

December 16, 2025

I published crier to PyPI. It’s a command-line tool for cross-posting content to multiple platforms at once.

The problem is simple: I write blog posts in Markdown with YAML front matter. I want them on dev.to, Hashnode, Bluesky, Mastodon, and wherever else, without manually copy-pasting into a dozen different editors. Crier handles this from the terminal.

Quick Start

pip install crier
cd your-blog
crier init

The init command walks you through setup: detecting content directories, configuring platforms with API keys.

The Workflow

  1. Your markdown posts with YAML front matter are the source of truth
  2. .crier/registry.yaml tracks what’s published where
  3. crier audit shows what’s missing or changed
  4. crier publish pushes content out
# See what needs publishing
crier audit

# Publish to multiple platforms
crier publish post.md --to devto --to bluesky --to mastodon

# Bulk publish everything missing
crier audit --publish --yes

LLM-Powered Auto-Rewrite

This is the feature I’m most pleased with. Short-form platforms like Bluesky (300 chars) and Mastodon (500 chars) need summaries, not full articles. Crier generates these automatically using any OpenAI-compatible LLM:

# Auto-generate short-form content
crier publish post.md --to bluesky --to mastodon --auto-rewrite

# Bulk publish with auto-rewrite
crier audit --publish --auto-rewrite --yes

Simplest setup: If you have OPENAI_API_KEY set, it just works (defaults to gpt-4o-mini).

Or use local models:

# ~/.config/crier/config.yaml
llm:
  base_url: http://localhost:11434/v1  # Ollama
  model: llama3

The LLM generates platform-appropriate summaries that fit within character limits, with automatic retry if the output is too long.

Supported Platforms

PlatformTypeNotes
dev.toBlogFull article support
HashnodeBlogFull article support
MediumBlogPublish/import mode
GhostBlogFull article support
WordPressBlogSelf-hosted or .com
ButtondownNewsletterEmail subscribers
BlueskySocialPosts with link cards
MastodonSocialToots with hashtags
ThreadsSocialShort posts
LinkedInSocialProfessional network
Twitter/XSocialCopy-paste mode
TelegramChannelBot posts
DiscordChannelWebhook embeds

Bulk Operations with Filters

The audit command supports filtering for targeted bulk operations:

# API platforms only (skip manual/import)
crier audit --publish --yes --only-api

# Long-form only (skip short-form social)
crier audit --publish --yes --long-form

# Random sample of 5 articles
crier audit --publish --yes --sample 5

# Filter by path and date
crier audit content/post --since 1m --only-api --publish --yes

# Combine filters
crier audit content/post --since 1w --only-api --long-form --sample 10 --publish --yes
FilterDescription
[PATH]Only scan specific directory
--sinceOnly content from this date (1d, 1w, 1m, or YYYY-MM-DD)
--only-apiSkip manual/import platforms
--long-formSkip short-form social platforms
--sample NRandom sample of N items
--auto-rewriteGenerate short-form content with LLM

Profiles

Group platforms into reusable profiles:

Read More