Migration from Litmus
Switching from Litmus or Email on Acid to Emailens for email QA and compatibility testing.
Why switch
Emailens provides the same core email QA capabilities at a fraction of the cost:
| Feature | Litmus | Email on Acid | Emailens |
|---|---|---|---|
| Per-client previews | Yes | Yes | Yes (13 clients) |
| CSS properties tracked | ~100 | ~100 | 250+ (auto-synced from caniemail) |
| CSS compatibility analysis | Limited | Limited | Detailed per-property |
| Compatibility scores | No | No | 0-100 per client |
| Dark mode simulation | Yes | Yes | Yes |
| DNS deliverability check | No | No | Yes (SPF/DKIM/DMARC/MX/BIMI) |
| Content hygiene analysis | Basic | Yes | Yes (15+ heuristic rules) |
| Code fix suggestions | No | No | Yes (framework-native) |
| CI/CD lint command | No | No | Yes (structured exit codes) |
| REST API | Yes | Yes | Yes |
| MCP server (AI integration) | No | No | Yes |
| GitHub Action | No | No | Yes |
| Starting price | $99/mo | $74/mo | $0 (free tier) |
Migration steps
1. Replace screenshot-based testing
Litmus and Email on Acid primarily use screenshots from real email clients. Emailens uses CSS-level analysis plus browser-rendered screenshots:
import { transformForAllClients, analyzeEmail } from "@emailens/engine";
const transforms = transformForAllClients(html);
const warnings = analyzeEmail(html);The transforms object contains per-client HTML after CSS rewriting, and warnings contains actionable compatibility issues with fix suggestions.
2. Update CI/CD pipelines
If you used Litmus or Email on Acid APIs in CI, replace them with the Emailens GitHub Action:
- uses: emailens/action@v1
with:
html-file: emails/welcome.html
threshold: 80Or use the REST API directly:
curl -X POST https://emailens.dev/api/preview \
-H "Authorization: Bearer $EMAILENS_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"html\": \"$(cat emails/welcome.html)\"}"3. Use code fixes instead of manual debugging
Emailens provides machine-readable fix suggestions for every compatibility warning:
import { analyzeEmail, getCodeFix } from "@emailens/engine";
const warnings = analyzeEmail(html);
for (const warning of warnings) {
const fix = getCodeFix(warning);
if (fix) {
console.log(`${warning.property}: ${fix.description}`);
console.log(` Before: ${fix.before}`);
console.log(` After: ${fix.after}`);
}
}4. Integrate with AI workflows
Connect the MCP server to Claude for conversational email QA — something not available with Litmus or Email on Acid.