The Macro Blog
Posts from our team about why we build Macro, how we dogfood, and the engineering behind it.
Macro vs ClickUp
An AI-first workspace with a real email client built in — one flat price, one shared memory, instead of a task tracker plus everything else.
How We Migrated Macro to Doppler and Made Configuration Safer
Deploy fails. Dig through the logs. Find the environment variable nobody added to the infra. We got tired of that loop.
Agents Attacking Documents with CRDTs
Swapping whole Markdown blocks was too coarse and LLMs are terrible at JSON patches. So we gave a team of small agents a thin library and let them edit the tree directly.
The Macro Filesystem
How Macro rebuilt MFS permissions around channel-based sharing: a single flat entity_access table that took worst-case reads from over 10 seconds to about 600ms and removed membership side effects.
Building a GraphQL Cache That Doesn’t Have to Fit in Memory
How Macro built a disk-backed, Rust-powered normalized GraphQL cache with bounded memory, offline replay, and shared browser/desktop architecture.
Getting Rate Limited for Fun and Profit
Backfilling an inbox at full speed is easy. Doing it while the user can still send, read, and archive email is the hard part.
Macro vs Linear
Keyboard-first tasks spun out of chat and email, linked to GitHub — inside one workspace with shared team memory.
Macro vs Notion
Agent-editable docs @linked into email, chat, and tasks — the whole stack already built in, not assembled from databases.
Macro vs Slack
Team channels with a real inbox and Signal vs Noise — wired into email, docs, tasks, and one shared memory.
Macro vs Superhuman
Fast, keyboard-first email on your own database — plus chat, docs, tasks, and CRM in the same workspace.