@jmoyson/coldr
v0.1.0
Published
Run Cold emails campaigns from your terminal.
Maintainers
Readme
🧊 Coldr
Ship cold email campaigns from your terminal: fast, safe, and open source.
Two commands. Full control. No dashboards.
👉 Star the repo and follow @jeremymoyson for behind-the-scenes updates and launch notes.
💬 Join the discussion: Launch Thread • Ideas
TL;DR — try it in 10 seconds
npx @jmoyson/coldr@latest helloInstant fake campaign preview. No setup, no key, just proof it works.
Requirements
- Node.js 18 or newer (the CLI checks this at startup and guides you to upgrade if needed).
- A Resend API key (optional for preview and dry-run, but required for sending real emails).
Want to send your own?
Init a campaign
npx @jmoyson/coldr@latest init
cd coldr-campaign
# Edit config.json, leads.csv, suppressions.json and template.html as you like
# Optional: preview a single email
npx @jmoyson/coldr@latest preview
# Dry-run first to check everything looks good
npx @jmoyson/coldr@latest schedule --dry-run
# Then run the campaign for real:
npx @jmoyson/coldr@latest schedule --resend-api-key <your-api-key>That’s it! Your first campaign is live, now watch cold leads warm up 🔥.
Why Coldr
Cold outreach tools are bloated, pricey, and lock you into dashboards.
Coldr stays small, local, and transparent. Built for people who prefer shipping code over managing UIs.
- ⚙️ Terminal-native - run everything from your CLI
- 🧾 Plain files - CSV, HTML, JSON you can version and diff
- 🧊 Safe by default - dry-run first, send explicit
- 💸 Free and open source - no hidden fees, no lock-in (works with Resend’s free tier)
Built for builders who’d rather own their process than rent another dashboard.
What it does
Coldr gives you everything you need to run and test campaigns in minutes.
Two commands, no setup, no guessing.
- ⚙️ Instant scaffolding -
coldr initcreates config, sample leads, template, and suppressions in one go - 🔍 Dry-run by default - preview every send safely, even without an API key
- 🧩 CSV-based A/B testing - add
variant,subject,intro, orctacolumns and Coldr renders them automatically - 🧾 Automatic logging -
scheduled_at,resend_id, andstatusget written back intoleads.csv - ✉️ Resend integration - clean scheduling, safe throttling, and retry logic built in
Troubleshooting
- Missing API key errors?
schedulestays in dry-run until you pass--resend-api-key <key>. leads.csvwon't load? Save it as UTF-8 with a clean header row; no blank first line, no trailing commas.- Variables coming through blank? Ensure your template placeholders exactly match the CSV headers (case-sensitive, no spaces).
- Sends firing at odd hours? Align
workDays/workHoursinconfig.jsonwith your local timezone or set theTZenv var. - Retry loop or throttling warnings? Check
throttleandmaxAttemptsinconfig.json; aggressive values slow delivery. - Still stuck? Ping me on X @jeremymoyson.
Next steps
- ⭐️ Star this repo - support the project and get notified on updates
- 🧊 Follow @jeremymoyson for launch threads, dev notes, and roadmap drops
- 📘 Go deeper - read
docs/usage.mdor check the scaffold examples - 💡 Want to help? - open an issue, suggest an idea, or improve the docs.
☕️ Buy me a coffee - fuels open-source mornings.
License
MIT © 2025 Jérémy Moyson
Built for builders who ship fast and want their outreach to feel the same.
