8-week sprint for ≤20 channels: 1 week discovery, 1 week environment setup, 3 weeks channel-by-channel translation with parity tests, 1 week parallel running, 1 week batched cutover, 1 week decommission and handover. The hard part isn't the Lua-to-JavaScript rewrite — it's parity testing under realistic message volumes and managing the cutover without disrupting clinical workflows.
Why teams migrate off Iguana
Three forces drive most Iguana-to-Mirth migrations in 2026:
- Licensing cost. Iguana is per-server commercial. As channel counts grow and as multi-environment (dev/staging/prod) becomes standard, license fees compound. Mirth Connect is open-source — the only ongoing cost is managed support, which is itself optional.
- FHIR R4 maturity gap. Mirth's FHIR R4 implementation has converged with the spec faster than Iguana's. Teams whose roadmaps include ONC (g)(10) certification, payer-provider FHIR, or SMART Backend Auth find the Mirth path lower-friction.
- Talent pool depth. The US labor market has dramatically more Mirth Connect / NextGen Connect engineers than Iguana specialists. This affects hiring cost, key-person risk, and the cost of internal upskilling.
See our Iguana → Mirth Migration Sprint for the productized engagement that implements this playbook.
Week 1 — Discovery and Iguana audit
The first week is inventory and risk assessment. Outputs:
- Channel inventory. Every Iguana channel listed with source, destination, message volume, transformer complexity, and clinical criticality.
- Complexity map. Channels grouped by translation difficulty: simple HL7 v2 routing (low), Lua transformers with custom logic (medium), Iguana-specific features used (high).
- Risk register. Channels touching clinical workflows where downtime can't be tolerated. These migrate last and get longer parallel-running windows.
- Plugin and custom-component inventory. Any Iguana custom Lua libraries, modules, or third-party Iguana plugins.
- Database and message-store assessment. Iguana's message logs and the volume that needs to remain queryable post-cutover.
By end of week 1 you should have a written sequencing plan: which channels migrate in which week, in which order, with which parity-test cohort.
Week 2 — Mirth Connect environment setup
Stand up the target environment in parallel to existing Iguana production. Most teams take this opportunity to move to containerized deployment — AWS ECS, Azure Container Apps, GCP Cloud Run, or Kubernetes. Same-hardware deployment is possible for short-term parallel running but rarely the long-term home.
Outputs by end of week 2: dev/staging/prod Mirth environments running, monitoring stack deployed (Grafana + Prometheus or your existing observability), database configured (PostgreSQL is our default for new installs), SSL/TLS certificates, HIPAA baseline (audit logging, RBAC, password policy), BAA executed if not already in place. See the Mirth Installation Sprint page for the install detail.
Weeks 3–5 — Channel-by-channel migration and parity testing
The bulk of the work. Translate Lua transformers to JavaScript or Groovy, rebuild channel definitions, run parity tests. Cadence: 2–3 simple channels per engineer-day, 1–2 medium-complexity channels, less for high-complexity.
Lua-to-JavaScript translation principles. Both languages are imperative, both have similar control flow, both handle string and table operations comparably. Most translations are 1:1: a Lua for k,v in pairs(t) becomes a JavaScript for (const [k,v] of Object.entries(t)). The places that bite: Lua's nil vs JavaScript's null/undefineddistinction, Lua's 1-based indexing vs JavaScript's 0-based, Lua's pattern matching (no direct equivalent — usually rewrite as JavaScript regex).
Parity testing strategy. For every channel, capture a representative cohort of messages from Iguana production — typically 1,000–10,000 messages spanning the message types and edge cases the channel handles. Run them through the new Mirth channel in the staging environment. Compare outputs byte-for-byte. Discrepancies are bugs that get fixed in the same engineer-day.
Iguana-specific feature replacement.Iguana's built-in monitoring dashboard doesn't have a 1:1 Mirth equivalent — Mirth Server Manager covers basics, Grafana + Prometheus covers the rest. Iguana's message-store query UI is replaced with channel-message search in Mirth's admin console plus log forwarding to your existing log-aggregation tool.
Week 6 — Parallel running
Both engines live in production. Messages mirrored to both — typically by adding a Mirth listener on a different port and configuring the upstream sender to send to both, or by tee'ing at the network level. Outputs from each engine compared via diff.
Run for at least 5 business days. Most channels show zero diffs after the parity-test work in weeks 3–5; the 5-day parallel run catches the rare cases where production traffic hits an edge case the test cohort missed. Triage and fix any diffs that appear; never proceed to cutover with unexplained diffs in the parallel run.
Critical channels (clinical ADT feeds, lab results to clinical decision support) get extended parallel-running windows — 1–2 weeks per channel. The trade-off is that longer parallel running costs more but reduces cutover risk for the channels that matter most.
Week 7 — Production cutover
Cutover happens in batches, not big-bang. Typical sequence: low-criticality channels first (vendor data feeds, billing), medium-criticality next (scheduling, document management), high-criticality last (clinical ADT, lab results, e-prescribing).
For each channel: redirect upstream sender to Mirth, verify message flow on Mirth side, monitor for 1 hour, declare cutover complete. Iguana is left running in passive mode (still receiving messages but discarding them) for 24 hours as a safety net — if anything goes wrong, redirect back is one config change.
The rollback runbook lives in version control, is rehearsed before cutover, and includes specific commands per channel. If a cutover doesn't go cleanly, rollback should take less than 15 minutes.
Week 8 — Iguana decommission and handover
Final week: shut down Iguana, archive its message store and configuration, decommission infrastructure, deliver the final handover pack. Pack includes:
- Channel-by-channel documentation in your Git repository
- Operational runbook (start/stop/upgrade procedures, rollback)
- Monitoring dashboards URLs and alert routing
- BAA and HIPAA evidence pack
- Parity-test corpus retained for future regression
- Knowledge-transfer session with your in-house team
Most teams transition into ongoing managed support at this point — typically Silver tier ($6,800/mo) for 24/7 monitoring and 15-minute critical SLA on the new Mirth deployment.
Failure modes to plan for
- Lua transformers using Iguana-specific helper APIs. Some Iguana convenience functions don't have direct Mirth equivalents. Inventory these in week 1 and write replacements early.
- Hidden state in Iguana's database. Some channels store cross-message state (correlation IDs, deduplication tables) in Iguana's built-in DB. Migrate state along with channel definition.
- Custom Lua libraries shared across channels. Build the JavaScript/Groovy equivalents as a Mirth Code Template Library so the migration pattern is reusable.
- Performance regression on large messages. Mirth's default JVM tuning is conservative. Tune heap size, garbage collector, and connection pool early — don't wait until production cutover.
- Downstream systems hardcoded to Iguana's message-id format. Mirth generates different IDs. Verify downstream systems don't depend on the format.
Cost and timeline expectations
Productized sprint pricing for this playbook:
- ≤20 channels: from $34,500, 8 weeks
- 20–50 channels: from $62,500, 12 weeks
- 50+ channels with custom Lua scripts: from $118,000, 16 weeks
T&M-equivalent pricing typically runs 30–40% higher because of scope-creep allowance. The fixed-price discipline is what makes 8-week timelines achievable — when there's no incentive to stretch the work, the work doesn't stretch.
5-year TCO for a 20-channel deployment: Iguana (license + maintenance + internal staff) typically runs $750K+. The Mirth path (open-source + Silver managed support for 5 years + this migration sprint) runs ~$540K. The exact delta depends on channel count and your internal labor cost.