Taction Software — FHIR Integration with Mirth Connect
Blog·April 29, 2026·Taction Software

Iguana to Mirth Connect Migration Playbook

Migrating from Iguana Integration Engine to Mirth Connect (NextGen Connect) typically takes 8 weeks for ≤20 channels. This playbook walks the eight-week sequence end-to-end: discovery, environment setup, Lua-to-JavaScript translation, parity testing, parallel running, batched cutover, and Iguana decommission. Plus the failure modes to plan for and the decisions that determine success.

Mirth ConnectIguanaMigrationHL7Healthcare Integration
TL;DR

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.

FAQ

Frequently Asked Questions

How long does the migration actually take?
8 weeks for the standard ≤20 channel sprint. The hard cap on speed is parallel running — you can't compress the 5-day production parallel-run window without raising risk. Channel-by-channel translation (weeks 3–5) can sometimes finish faster but the savings move into longer parity testing rather than reducing total duration.
What if we have very custom Lua transformers?
Custom Lua usually translates 1:1 to JavaScript with manual line-by-line review. The translations that take longer are: Iguana-specific helper APIs (need replacement implementations), Lua pattern matching (rewrite as regex), and code that depends on Lua's metatables (rewrite using JavaScript classes or plain object composition). For very custom estates, the 50+ channel sprint at 16 weeks gives the additional buffer.
Can we migrate channel by channel without big-bang cutover?
Yes — that's the default. Channel-by-channel parallel running for 5+ days each, batched cutover from low- to high-criticality. Big-bang cutover is technically possible for very small estates but unnecessarily risky and we don't recommend it.
What happens to Iguana's message history?
Archive it. Most teams export the message store as JSON or NDJSON and store it in S3 (or your equivalent) with 6+ year HIPAA retention. Mirth's own message store starts fresh post-cutover, so historical queries against pre-cutover messages need to go to the archive.

Need expert Mirth Connect support?

Whether you have a one-time integration project or need ongoing managed support, every engagement is named, scoped, and priced upfront — productized packages, no hourly billing.

Talk to a Mirth Solutions Architect

60-second form. Senior engineer responds within one business day.

What is 9 + 7 ?