Perfuse

Leaving Mirth Connect

A free alternative to Mirth Connect that runs your channels

From version 4.6, Mirth Connect is commercial only. Perfuse is free under Apache 2.0, reads your Mirth exports, runs your existing JavaScript unchanged, and runs beside Mirth on your real traffic until you can prove the two agree.

Why sites look elsewhere

Mirth works. Its licence changed.

Mirth Connect has run interfaces at thousands of sites for nearly twenty years. Teams start looking for other reasons:

The licence

NextGen no longer publishes open-source releases. The free engine many hospitals run has no upgrade path that stays free.

The Java runtime

A JVM to install, patch and keep supported on every server the engine touches.

The footprint

A 254 MB install plus OpenJDK, holding 383 MB of memory while idle.

Restarts

An engine that needs to warm up is one you think twice about restarting in the working day.

Side by side

Perfuse and Mirth Connect

PerfuseMirth Connect
LicenceApache 2.0, no tiersCommercial only since 4.6
Memory at rest45 MB383 MB
Runtime requiredNone: one programOpenJDK 17
Your Mirth JavaScriptRuns unchanged, E4X includedNative
FormatsHL7 v2, FHIR, DICOM, X12, CDA in the one programHL7 v2 and FHIR core; others by extension
Kafka, MQTT, IBM MQ, Google CloudBuilt inNot built in
CMS-0057-F payer APIsAll four, tested with InfernoNot provided
Find a patient across formatsOne search box over HL7 v2, FHIR, DICOM and X12Search per format
Production track recordNone yet (v0.1.23)Twenty years, thousands of sites

The last row should weigh more than the first. Perfuse has not yet processed production clinical traffic. Everything that was tested is written down, and so is everything that was not, in the verification record.

The usual blocker

E4X runs here

Mirth transformers are JavaScript, and many use E4X, the syntax that lets a script write msg['PID']['PID.5']['PID.5.1']. Modern JavaScript engines removed E4X years ago, so most migrations discover on the first transformer that they are really a rewrite. Perfuse runs E4X, along with channelMap, $(), DateUtil and SerializerFactory.

That is why a Mirth migration here is a conversion, not a rewrite of every transformer you own.

Five steps: explain, translate, test, run in shadow beside Mirth, prove they agree.

How the move works

Five steps, each one reversible

1. Explain

perfuse explain server-backup.xml says by name what converts, what converts with caveats, and what does not, before you commit to anything.

2. Translate

perfuse translate turns a channel, a group, a code template library or a whole server backup into Perfuse channels.

3. Test

perfuse test runs each channel on sample messages and checks what comes out.

4. Run beside Mirth

Mirth forwards a copy of live traffic; Perfuse writes its results to a folder and delivers nothing. No patient is affected, so nobody needs to approve it.

5. Prove

perfuse compare pairs the two engines' outputs by message and reports every difference, grouped by cause.

The same tools work for the Open Integration Engine and BridgeLink, the open-source forks of Mirth, and Perfuse can write channels back out as Mirth files, so the door stays open both ways.

Quick start

Find out in a minute what your channels need

Export your Mirth server backup from the Administrator (or OIE, or BridgeLink), and run these on any machine. Nothing is changed or sent anywhere.

The full migration guide
# what converts, what converts with caveats, what does not
perfuse explain server-backup.xml

# bring the channels across, code template libraries included
perfuse translate -o channels/ server-backup.xml

# run each channel on sample messages
perfuse test channels/

# after running both engines on the same messages,
# only Mirth delivering: every difference, grouped by cause
perfuse compare mirth-out/ perfuse-out/

Honest limits

What has been tested, and what has not

Details in the verification record.

AreaTestedNot yet
Reading Mirth exportsServer backups, channel groups and code template libraries written by Mirth 4.5.2, OIE 4.5.2 and 4.6.0, and BridgeLink 26.9.0 themselves, translated and run on every buildChannels set up by hand in each Administrator may use settings this corpus does not; third-party plugins are not covered
ConnectorsMLLP and TCP, HTTP, file, database, DICOM, Web Service (SOAP), SMTP, JavaScript, Channel Reader/WriterJMS and the Document Writer do not translate, and are reported as blockers
ScriptsMirth JavaScript with E4X, channelMap, $(), DateUtil, and the common Java classes (SimpleDateFormat, HashMap and the like)Calls into Mirth's own server classes, vendor jars and uncommon Java classes fail by name; the explain report lists each one
Writing channels back to MirthTen transport pairs loaded into all four engines without being marked invalidFilters, transformations and scripts have no place in Mirth's format and are listed, not approximated
ProductionNo hospital has run production traffic through Perfuse yet. That is why step 4 runs it beside Mirth, delivering nothing, until the comparison is clean.

Find out what your channels need, today

Run perfuse explain on your Mirth export. It changes nothing and takes a minute.