Windows
Quick Start Guide
Documentation
Quick Start Guides and release notes, all in one place.
Quick Start Guide
Quick Start Guide
Quick Start Guide
Quick Start Guide
Release notes
Open any version to read its full notes.
BridgeLink 26.9.0 is a security-focused release: it completes the CVE-elimination work begun in 26.6.0, retires several unmaintained libraries, and modernizes the SQL Server and SFTP transports. It also carries every fix from the 26.6.1 security patch. Several of these changes are deliberately stricter than what they replace, so please read the compatibility notes below before upgrading.
Most installations upgrade cleanly with no action required. However, this release removes or hardens several long-standing behaviors, and a small number of configurations need attention before you start 26.9.0. Review the fourteen items below against your environment; each points to a detailed section later in these notes.
conf/mirth.properties says database = derby (the default for a new install) and the server runs on Java 17, it stops at startup with embedded Derby requires Java 21+ as of 26.9; upgrade Java or switch to an external database. Servers on an external database (PostgreSQL, MySQL, SQL Server, Oracle) can stay on Java 17. See Java 21 and the Built-in Derby Database.jdbc:jtds:sqlserver://host:port/db) must be updated to the Microsoft mssql-jdbc form (jdbc:sqlserver://host:port;databaseName=db, driver class com.microsoft.sqlserver.jdbc.SQLServerDriver) before upgrading, otherwise the channel fails to deploy with a ClassNotFoundException. There is no automated rewrite of channel connection strings. jTDS was also BridgeLink's only Sybase option, so Sybase connectivity does not survive this upgrade. Installs that run BridgeLink's own internal database on SQL Server must additionally update database.url (and any pinned database.driver) in mirth.properties before first startup. A Dynamic Lookup Gateway that uses its own SQL Server database (useExternalDb=true in conf/dynamic-lookup.properties) needs the same change to its database.url. See SQL Server Driver: mssql-jdbc Upgrade + jTDS Retirement.encrypt was either unencrypted or encrypted without a certificate check; after the upgrade it is encrypted and the certificate is checked. A SQL Server with a self-signed certificate, one from a CA Java does not trust, or one whose name does not match the URL's hostname will refuse the connection. That can stop the server from starting (if BridgeLink's own database is on SQL Server), fail Database Reader and Writer channels, and fail scripts that open their own connections. BridgeLink does not change any connection URL for you, so review them before upgrading. See SQL Server Driver: mssql-jdbc Upgrade + jTDS Retirement.<!DOCTYPE ... SYSTEM "..."> line), or pulls in another file through xsl:import, xsl:include or document(), now fails the step with an ERROR instead of fetching it. Some older CDA and HL7 v3 feeds carry such a line. See Security Fixes: Inherited Mirth XXE and SQL Injection CVEs.ca.uhn.hl7v2.llp.charset, or the new server.defaultencoding), which they ignored in 26.6.x. Separately, a Windows server moving from Java 17 to Java 21 changes its default text encoding from windows-1252 to UTF-8. Nothing is migrated automatically. See Default Text Encoding Changes.webadmin.war no longer ships and the /webadmin path now returns 404. Browser-based administration moves to the standalone BridgeLink WebAdmin console (see the end of these notes). If your team bookmarks or scripts against /webadmin, plan the switch before upgrading. Upgrading does not remove an existing webadmin.war: delete webapps/webadmin.war from the install directory after upgrading, or the old dashboard stays reachable at /webadmin.Packages.oshi.* can fail after upgrading: several 3.9.1 method names were removed or moved in 6.x, and because Rhino resolves Java members at runtime, a broken call deploys cleanly and then fails per-message (in the quietest case, a JS Reader poll script that logs nothing). Audit channel scripts for Packages.oshi / importPackage of OSHI before upgrading. See arm64 / Graviton Support: OSHI + JNA Upgrade..sh and RPM installers now run blservice as the bridgelink system user (or an account you choose in the .sh installer) instead of root, and the service runs with NoNewPrivileges=true, so channel scripts can no longer use sudo or setuid programs. See Linux Installers Run the Service as a Dedicated User.blservice as NT SERVICE\blservice, and an upgrade moves a service on Local System, Local Service or Network Service to it. That account reaches the network as the computer account, so a channel that reads a UNC share or uses SQL Server Windows authentication needs the computer account granted access, or a custom service account. See Windows Installer Runs the Service as a Virtual Account.digest.iterations value above 10,000,000 locks every administrator out. BouncyCastle 1.86 caps PBKDF2 at 10,000,000 iterations. The default (600,000) is unaffected. If you raised digest.iterations above the cap, every login is rejected as a wrong password with nothing in the log. Raise the cap in the server's JVM options before upgrading, and do not lower digest.iterations. See Security: BouncyCastle 1.86.custom-lib or to a plugin, replace them with version 2.55.8 before upgrading. Jars built for 2.15.28 fail against the new SDK. See AWS SDK for Java v2 Upgrade.Java 21 is recommended for every BridgeLink 26.9.0 server. Java 17 remains supported, with one exception: the built-in Derby database.
| Your server's database | On Java 17 | On Java 21 |
|---|---|---|
Built-in Derby (database = derby) | Stops at startup | Runs |
| External database (PostgreSQL, MySQL, SQL Server, Oracle) | Runs, unaffected | Runs, recommended |
database = derby and the Java version is lower than 21. If both are true, it logs this line at the ERROR level and exits, so nothing is changed on disk:embedded Derby requires Java 21+ as of 26.9; upgrade Java or switch to an external database
java-21-openjdk-headless first.database.url ends with upgrade=false, so 26.9.0 opens the database without rewriting it. Do not change it to upgrade=true: that rewrite into the 10.17 format is one-way.custom-lib), check that each one runs on Java 21 before you move a server to it. Watch logs/mirth.log on the first start for UnsupportedClassVersionError or NoClassDefFoundError.logs/mirth.log naming the Java version, the database type and the default character set, for example Running OpenJDK 64-Bit Server VM 21.0.12 on ... derby, with charset UTF-8.This release completes the CVE-elimination work carried over from 26.6.0. The XStream, BouncyCastle, and Rhino upgrades that 26.6.0 evaluated and intentionally deferred now land with their regression coverage in place, joined by the mssql-jdbc, jsch, Jersey/HK2, Jackson and Derby upgrades.
| Library | Before | After |
|---|---|---|
| XStream | 1.4.20 | 1.4.21 |
| BouncyCastle (bcprov / bcpkix / bcutil jdk18on) | 1.78.1 | 1.86 |
| Rhino (JavaScript engine) | 1.7.13 | 1.7.15.1 |
| Apache Derby (derby, derbyshared, derbytools) | 10.16.1.1 | 10.17.1.0 (already in 26.6.1) |
| mssql-jdbc | 8.4.1.jre8 | 12.10.2.jre11 |
| jsch (com.github.mwiede) | 0.2.18 | 2.28.5 |
| Jersey (client / common / server / container / media) | 2.22.1 | 2.48 |
| HK2 | 2.4.0-b31 | 2.6.1 |
| Jackson (12-jar family, incl. jackson-databind) | 2.14.3 | 2.18.10 |
| PostgreSQL JDBC | 42.7.11 | 42.7.12 |
CVEs addressed by these upgrades:
toFixed() CPU-exhaustion denial-of-service reachable through channel-author JavaScript transformers, and the most directly reachable of the three re-landed itemsAlso bumped for CVE hygiene alongside the above: netty 4.1.135.Final to 4.1.137.Final, and swagger-core 2.0.10 to 2.2.28 as the companion to the Jackson bump.
Notes:
MirthDomReader post-migration reload fix.javax-package line (packages remain javax.ws.rs.* / javax.inject.*); it is a security refresh, not a Jakarta re-platforming. Its companion jars move with it: javassist 3.26.0-GA to 3.30.2-GA, mimepull 1.9.7 to 1.9.15, osgi-resource-locator 1.0.1 to 1.0.3, and new jersey-hk2 and aopalliance-repackaged jars. javax.ws.rs-api and javax.inject are replaced by jakarta.ws.rs-api 2.1.6 and jakarta.inject 2.6.1, which despite the jar names still provide the javax.* packages.commons-* family are unchanged from 26.6.0.These three fixes answer CISA advisory ICSMA-26-253-01. Two are XML external entity (XXE) flaws, where a crafted XML document makes the server read a file or call a web address it should not. The third is a SQL injection flaw, where crafted input gets run as a database command. They are the same fixes that shipped in 26.6.1.
<!DOCTYPE ... SYSTEM "..."> line) now fails the step, with the error logged at the ERROR level. Some older CDA and HL7 v3 feeds carry such a line. Expect those messages to error, and look into them.xsl:import, xsl:include or document(), also fails the step now. If a stylesheet loads a lookup table that way, supply that data another way.XSLT Step: custom TransformerFactory ... rejected. Watch for that line after upgrading.POST /connectors/jdbc/_getTables API, used when you browse tables while setting up a Database Reader or Writer.selectLimit query is run only when it matches one of the shipped safe shapes (SELECT * FROM ? with an optional LIMIT, TOP, WHERE ROWNUM or FETCH FIRST clause). It now runs with a five second timeout and returns at most one row.selectLimit that does not match, or a table or schema name that contains anything other than letters, digits, _, . or $, is not run. BridgeLink reads the columns through the standard database lookup instead. That lookup gives the same column list but can be slower on very large databases.BouncyCastle moves from 1.78.1 to 1.86 in the server, Administrator client and CLI libraries (bcprov, bcpkix and bcutil jdk18on). Deployments on default settings need no action.
org.bouncycastle.pbe.max_iteration_count, default 10,000,000). BridgeLink hashes administrator passwords with PBKDF2 at digest.iterations (default 600,000, unaffected).digest.iterations above 10,000,000, every administrator login fails after the upgrade. The failure is silent: each login is rejected as an incorrect username or password, nothing is written to the server log, and each attempt still counts toward account lockout. If every administrator is suddenly locked out after this upgrade, check digest.iterations before starting a credential reset.-Dorg.bouncycastle.pbe.max_iteration_count=<value>, at least your digest.iterations value, to the server's JVM options file.digest.iterations as a fix. Stored password hashes do not record their iteration count, so lowering it makes every existing password fail to verify.Z can be accepted again with -Dorg.bouncycastle.asn1.allow_zoneless_utctime=true; BridgeLink does not set it.KeyStore.getInstance("PKCS12", "BC")) now writes 600,000 PBE iterations instead of 51,200, so storing and loading one costs about twelve times more. org.bouncycastle.pkcs12.store_it_count sets the count. BridgeLink's own keystore is served by the JDK, not BouncyCastle, and is unaffected.org.bouncycastle.pqc.crypto ML-DSA, ML-KEM and SLH-DSA classes and the legacy Rainbow, Picnic, FrodoKEM and CMCE implementations. A channel script using the ML-DSA, ML-KEM or SLH-DSA classes must move to the standardized classes under org.bouncycastle.crypto; Rainbow and Picnic have no replacement. BridgeLink itself uses none of them.Beyond version bumps, this release removes or replaces several bundled libraries that are no longer maintained upstream, eliminating a class of long-term CVE exposure rather than patching around it. The most visible swap is the PDF/RTF engine, and Document Writer retains full PDF and RTF output after it, with no feature regression.
| Removed | Replaced with | Reason |
|---|---|---|
| iText 2.1.7 / itext-rtf 2.1.7 | OpenPDF 2.0.5 / OpenRTF 1.2.1 | Unmaintained PDF/RTF engine |
| commons-httpclient 3.0.1 | HttpComponents 4.5.13 (already shipped; 3.x call sites repointed, jar removed) | End-of-life, unpatched CVE-2020-13956 |
| webdavclient4j-core 0.92 | Sardine 5.9 | Pulled in vulnerable httpclient |
| jai_imageio | jai-imageio-core 1.4.0 / jai-imageio-jpeg2000 1.4.0 | Unmaintained imaging codec |
| saaj-impl 1.0 | saaj-impl 1.5.3 | Security refresh |
| wsdl4j 1.6.2-fixed | wsdl4j 1.6.3 | Security refresh |
| backport-util-concurrent | java.util.Collections (JDK-native) | Dead code removed |
Scanner note: OWASP Dependency-Check may report CVE-2021-37533 (Apache Commons Net, fixed in 3.9.0) against commons-httpclient, commons-el 1.0 and not-going-to-be-commons-ssl 0.3.18. That is a naming collision in the scanner, not an exposure: BridgeLink has shipped the fixed commons-net 3.9.0 since 26.6.0 and does not use those jars for FTP.
The JDBC connector's Microsoft SQL Server driver moves to a current, actively maintained release (8.4.1.jre8 to 12.10.2.jre11), and the long-obsolete jTDS driver is retired entirely. This is the change most likely to require action before you upgrade, so review the points below if any channel or your internal database talks to SQL Server.
jtds-1.3.1.jar and its vendored TLS source patch are gone from every shipped location, and the "SQL Server/Sybase (jTDS)" entry is removed from the driver dropdown (DriverInfo) and from dbdrivers.xml. Sybase support is dropped with it: jTDS was BridgeLink's only Sybase JDBC option, and mssql-jdbc does not speak the Sybase/TDS dialect.net.sourceforge.jtds.jdbc.Driver, jdbc:jtds:sqlserver://host:port/db) must be migrated to mssql-jdbc (com.microsoft.sqlserver.jdbc.SQLServerDriver, jdbc:sqlserver://host:port;databaseName=db) before upgrading, or the channel will fail to deploy with a ClassNotFoundException. There is no automated rewrite of channel-stored connection strings.encrypt default from false to true, and the driver checks the server's certificate whenever the connection is encrypted. Coming from 26.6 or earlier, connections that did not set encrypt were either unencrypted or encrypted without a certificate check; after the upgrade they are encrypted and the certificate is checked. If your SQL Server uses a self-signed certificate, a certificate from a CA the Java runtime does not trust, or one whose name does not match the hostname in the URL, those connections fail with "could not establish a secure connection", "PKIX path building failed" or "Failed to validate the server name". Four places can be affected:database.url in mirth.properties): the server will not start.database.url in conf/dynamic-lookup.properties, when useExternalDb=true): the server starts, but the gateway does not initialize.BridgeLink does not change any connection URL during the upgrade, so review them before you upgrade. The best fix is a SQL Server certificate BridgeLink can validate: one issued by a public CA, or by your internal CA with its root added to the Java trust store. If that is not possible, add ;trustServerCertificate=true to the affected URL, which keeps encryption on but skips the certificate check. Adding ;encrypt=false is not enough on its own: if your SQL Server forces encryption, the connection is still encrypted and the certificate is still checked. URLs that already set encrypt=true are not affected.
mcserver database (SQL-Server-backed installs only). Installs running BridgeLink's own backing store on SQL Server (database = sqlserver) must manually update database.url (and any pinned database.driver) in mirth.properties to the mssql-jdbc form before starting 26.9. A first-startup migrator strips the retired jTDS entry from the persisted driver list, or replaces it with the Microsoft SQL Server entry when jTDS was the only SQL Server driver listed, so the dropdown never loses SQL Server. That cleanup does not rewrite mirth.properties.conf/dynamic-lookup.properties has useExternalDb=true and database = sqlserver, the gateway used the jTDS driver by default in 26.6 and earlier, and the shipped example URL was the jTDS form. It now defaults to the Microsoft driver, but nothing rewrites the URL, and upgrades keep your existing file. Before upgrading, change database.url from jdbc:jtds:sqlserver://host:port/db to jdbc:sqlserver://host:port;databaseName=db, and remove any database.driver = net.sourceforge.jtds.jdbc.Driver line. If you do not, the server still starts, but the gateway fails to initialize (mirth.log shows Error instantiating plugin), and channels that call lookup functions fail. The certificate note above applies to this connection as well. Gateways on BridgeLink's internal database (useExternalDb=false, the default) are covered by the mirth.properties item.docs/mssql-jdbc-encryption-compatibility.md in the repository.The File connector's SFTP transport now runs on a current release of com.github.mwiede:jsch (0.2.18 to 2.28.5), closing out staleness and CVE-hygiene exposure and maximizing distance from future advisories. For channels connecting to modern SFTP servers this is a drop-in upgrade, with no API changes and no reconfiguration required.
diffie-hellman-group14-sha1 kex, plain ssh-rsa signatures, 3des-cbc/aes128-cbc ciphers, hmac-md5 and hmac-sha1-96 MACs). The 2.28.5 upgrade only adds algorithms (post-quantum kex, OpenSSH certificate host keys) and reorders cipher preference (AES-GCM now preferred over AES-CTR).JSchAlgoNegoFailException: Algorithm negotiation fail. This is the connector's long-standing secure-by-default behavior, not a new regression.session.setConfig()) can restore connectivity to a specific legacy server without weakening defaults for any other channel.docs/sftp-legacy-algorithm-compatibility.md in the repository.Starting with Java 18, the JVM's default text encoding is UTF-8 on every operating system. Any connector whose Encoding is left at "Default" follows that default: on a pre-Java-18 Windows server it resolved to windows-1252, and on Java 18 and later it resolves to UTF-8. Linux and macOS servers almost always used UTF-8 already.
ca.uhn.hl7v2.llp.charset is already set in your mirth.properties, check its value before upgrading: those connectors ignored it before and will follow it now.server.defaultencoding property: the documented name for that same server-wide value. It takes precedence over the legacy alias ca.uhn.hl7v2.llp.charset when both are set. An invalid value is logged at ERROR and ignored.mirth.log when they differ: JVM default charset is ... but the host (native) encoding is .... mirth.log rolls at 500KB, so check it soon after the restart. The absence of the warning does not clear you for the TCP/MLLP and HTTP change above.server.defaultencoding = windows-1252 in conf/mirth.properties, or pin the Encoding field on each affected connector.FileUtil.read or FileUtil.write without an explicit charset, and the Document Writer's RTF output, follow the JVM default directly. FileUtil.read and FileUtil.write take no charset, so in those scripts read the bytes and decode them yourself, for example new java.lang.String(FileUtil.readBytes(fileName), 'windows-1252').server.defaultencoding for you.mirth.log file appender now always writes UTF-8, regardless of the JVM default.BridgeLink runs on the JVM and was already arm64-capable, but the bundled OSHI system-hardware library (with its JNA native bindings) was too old to work on arm64/aarch64 hosts: channel scripts that read CPU or memory stats via Packages.oshi.* failed on AWS Graviton and Apple Silicon with LinuxCentralProcessor: Couldn't find physical package count. This release upgrades OSHI across a major version, with the mandatory JNA lockstep bump, resolving that error on aarch64.
| Library | Before | After |
|---|---|---|
| OSHI (oshi-core) | 3.9.1 | 6.12.0 |
| JNA (jna / jna-platform) | 4.5.2 | 5.18.1 |
mirth.log unless log.errorevent.enabled=true. Audit channel scripts for OSHI use before upgrading.processor.getSystemCpuLoad() is removed (use the tick-delta form getSystemCpuLoadBetweenTicks(priorTicks), caching the prior tick array); getVendorFreq() moved to getProcessorIdentifier(); memory.getSwapUsed() / getSwapTotal() moved under memory.getVirtualMemory().getSystemCpuLoad(long). In 6.x that overload blocks the calling thread for the supplied millisecond interval before returning; dropped into a per-message channel it serializes throughput. CPU frequency may also legitimately read 0 / N/A on Graviton.docs/irt-1801-oshi-6x-enlighten-migration.md in the repository.The AWS SDK for Java v2, used by the File connector's S3 mode, moves to a current release. The old SDK does not work with the Jackson version in this release: without this upgrade, an S3 File Reader or File Writer using the default credential provider chain (for example an EC2 instance role) would fail.
| Library | Before | After |
|---|---|---|
| AWS SDK for Java v2 | 2.15.28 | 2.55.8 |
custom-lib or to a plugin, replace them with version 2.55.8. Service jars built for 2.15.28 fail against the upgraded SDK.server-lib directory so no 2.15.28 jars remain.The legacy bundled web dashboard (webadmin.war) is retired in favor of the standalone BridgeLink WebAdmin console (see the section at the end of these notes), and the server now signposts users to it rather than serving a stale in-process UI.
GET /webadmin-url endpoint returns {"url":"<webadmin.url>"} (JSON), driven by the new webadmin.url property./webadmin path now returns 404; / serves a lightweight signpost page. The distribution no longer ships webadmin.war.webadmin.war left by an earlier version, and the server still loads any .war file in webapps/. After upgrading, stop the server, delete webapps/webadmin.war from the install directory, and start the server again. Until you do, the legacy dashboard is still served at /webadmin.Core gains a substantial REST surface that powers the browser-based WebAdmin console: the channel editor, script tooling, and datatype configuration in WebAdmin all build on it.
POST /server/_validateScript and POST /server/_validateScripts compile-check one or many Rhino scripts server-side and return structured results (the batch form is keyed by caller-supplied ids), so the editor can flag JavaScript errors without deploying a channel.GET /extensions/{extensionName}/webadmin/datatype-defaults/{dataTypeName} returns the XML serialization of an extension's default DataTypeProperties, the datatype counterpart to the existing connector defaults endpoint. Read-only; manifest/defaults reads remain canonical-path guarded against the extensions directory. A sample extension (mock DIMSE) demonstrating the contract is included.(Contributed: PR #182.)
Stored passwords are now checked against the configured password policy at login, so a tightened policy actually reaches existing accounts instead of applying only to new passwords. Existing non-compliant passwords are not locked out: the user still logs in and is prompted to change the password, so the policy can be adopted without disrupting existing users.
password.enforceatlogin (default true) turns the check on.password.restrictgracesessions (default false), when enabled, confines a session that logged in with a non-compliant password to changing its own password (other calls return HTTP 403) until the password is rotated.(Contributed: PR #194.)
The SMTP Sender now supports CC and BCC recipients, in the connector settings, in the test-email dialog, and in the SMTPConnection.send JavaScript API (a new overload with cc and bcc arguments). The "Send an Email" code template is updated to match. Existing channels saved without CC/BCC keep working unchanged.
(Contributed: public PR #177.)
A channel whose connector waits on something that never answers (a partner system that accepts a connection and goes silent, or a database call that never returns) can no longer hold up the rest of the server. Before this release Stop never returned for such a channel, Halt could hang on the same work, and because undeploy stops a channel first, one stuck channel could block Redeploy All and server shutdown for every other channel.
server.channelstopgraceperiod seconds (Settings > Server > "Channel Stop Grace Period", default 120) for its threads and connector stop hooks. When the period runs out the stop fails with an error naming the stuck thread and its top stack frames, and the channel stays Stopping; nothing escalates to halt on its own. If the stuck work later finishes, the stop completes and the channel reaches Stopped by itself. Keep the period at 10 seconds or more, since a source queue polls in one-second slices. Setting it to 0 restores the old wait-forever stop and turns off the overdue flag below.GET /channels/{channelId}/_threads lists every live thread belonging to the channel with its state, the lock it waits on and its top stack frames, plus what the last stop timed out on. It returns stack frames only, never message content or connector settings, and requires the dashboard view permission. WebAdmin shows it as Thread Diagnostics on the dashboard. Dashboard status also gains stateSince and lifecycleOverdue, set when a channel has been Stopping or Starting longer than the grace period.BridgeLink refuses to run as root, but earlier Linux installers (.sh and RPM) registered the blservice systemd unit with no user, so a default install started as root and exited at first boot. Both Linux installers now run the service as a system user: bridgelink for the RPM, and bridgelink or an account you choose in the .sh installer.
/etc/systemd/system/blservice.service.d/10-bridgelink-user.conf..sh install, set -Vunix_service_user=<account>. Running as root is still possible with "-Vunix_service_account_type=root (not recommended)" (keep the quotes); the service then starts only with server.allowRoot = true in conf/mirth.properties.systemctl edit blservice. Uninstalling removes the drop-in and leaves the user.NoNewPrivileges=true, so channel scripts can no longer gain privileges through sudo or setuid programs. If a channel needs that, do not edit the installer's drop-in (it is rewritten on every upgrade): run systemctl edit blservice, add NoNewPrivileges=false under [Service], and restart. An install that already runs under a User= drop-in of your own does not get the installer's drop-in or this setting.BridgeLink refuses to run as an administrator, and Local System is one. Earlier Windows installers defaulted to Local System, so a default install ended with a service that never started (mirth.log shows BridgeLink is running as root/Administrator and nothing listens on 8443). The installer now runs blservice as NT SERVICE\blservice, the service's own virtual account: Windows manages it, it has no password, and it is not an administrator. The installer gives it write access to the installation directory.
server.allowRoot = true in conf/mirth.properties.-q upgrades, which previously reset the service to Local System and discarded the password. A service on Local System, Local Service or Network Service moves to the virtual account, unless server.allowRoot = true is set in conf/mirth.properties (a -Dserver.allowRoot=true line in blservice.vmoptions alone does not count).service_account_type=Custom account..., service_account_user and service_account_password, writing a backslash in the user name twice (service_account_user=.\\svc-bl). An old service_account_type=Local System line now gives the virtual account; to choose Local System on purpose, use service_account_type=Local System (not recommended).An unattended Windows install (-q) used to skip WebAdmin silently while its response file still recorded installWebAdmin=true. It now runs the WebAdmin installer and waits for it, so the run ends with the BridgeLinkWebAdmin service listening on 8444. To skip WebAdmin, pass -VinstallWebAdmin=false or set installWebAdmin=false in the response file. If the WebAdmin installer fails or takes longer than 15 minutes, the installer log says WebAdmin was not installed: with the reason; WebAdmin's own log is webadmin-setup.log in the installation directory.
Upgrading with rpm -U no longer overwrites your configuration. Earlier RPMs replaced every file in conf/ with the packaged template, losing your edits and the keystore password generated on first start, so after the upgrade the server reported "started" but did not listen on HTTPS (8443). This also protects an upgrade from 26.6.x.
mirth.properties, dynamic-lookup.properties, log4j2.properties, log4j2-cli.properties, mirth-cli-config.properties, dbdrivers.xml and the launcher JVM option files (blservice.vmoptions, blserver.vmoptions, blcommand.vmoptions) are now kept across upgrades, so a changed heap size (-Xmx) survives.<name>.rpmnew. The new mirth.properties keys are already added to your file for you. If you edited blcommand.vmoptions, merge in the new --add-opens lines from blcommand.vmoptions.rpmnew. A file you never changed is replaced with the new template.rpm -U --replacepkgs. Do not remove the package first. rpm -e keeps a changed file as <name>.rpmsave but leaves the keystore and database in appdata/ in place, so a following rpm -i starts on a fresh mirth.properties whose keystore passwords do not match the old keystore, and HTTPS never comes up. Any other edits to that file, such as the database connection, are also only in the .rpmsave.conf/mirth.properties.rpmsave back over conf/mirth.properties and run systemctl restart blservice.appdata/keystore.jks to clear the error. It also holds the server's encryption key, and encrypted data cannot be read without it.The .sh installer already kept conf/ and is unchanged.
MigrationException naming the version, instead of silently re-running the old migration steps against it. A fresh install is unaffected.get, set or delete must use the new body-based endpoints.Unable to create SAAJ meta-factory, because the listener's worker threads could not see the SAAJ implementation on newer Java versions. Web Service Listener channels now work on Java 21.sqlserver database type defaulted to the jTDS driver, which no longer ships. It now defaults to the Microsoft driver (com.microsoft.sqlserver.jdbc.SQLServerDriver). The comments in the shipped mirth.properties and dynamic-lookup.properties are updated to match. A gateway configured with a jdbc:jtds: URL still has to be updated by hand; see SQL Server Driver: mssql-jdbc Upgrade + jTDS Retirement.webdav:// / webdavs:// connections silently ignored the configured port (forcing the default 80/443); the port is now honored, matching FTP/SFTP behavior.NullPointerException in the user edit panel. (Contributed: PR #187.)MirthXmlUtil now round-trips supplementary (astral-plane) characters correctly instead of corrupting them. Characters that XML cannot hold now fail serialization instead of producing malformed XML (see compatibility item 13).mirth.properties| Key | Default | Description |
|---|---|---|
webadmin.url | (blank) | URL of the standalone WebAdmin console, served by the new /webadmin-url endpoint. |
password.enforceatlogin | true | Check stored passwords against the password policy at login and prompt a non-compliant user to change it. |
password.restrictgracesessions | false | When enabled, a session that logged in with a non-compliant password may only change its own password until it is rotated. |
server.defaultencoding | (commented out) | Charset used by connectors whose Encoding is "Default". Takes precedence over the legacy alias ca.uhn.hl7v2.llp.charset. Invalid values are logged at ERROR and ignored. |
database.url / database.driver from the jTDS form to the mssql-jdbc form before starting 26.9; see the mssql-jdbc section above.upgrade=false at the end of database.url; see the Java 21 section above.dbdrivers.xmlThe command-line client (blcommand) is packaged separately. A CLI only works against a server of the same version, so use the 26.9.0 CLI with a 26.9.0 server.
BridgeLink WebAdmin, the modern browser-based administration console and replacement for the legacy Java Swing administrator, continues to advance alongside the engine. It runs as a lightweight Node.js server and requires no Java runtime and no per-workstation install: point any modern browser (Chrome, Edge, Firefox, Safari) at it and log in with your existing BridgeLink credentials. The new Core API surface in this release (script validation, datatype defaults, connector defaults, cron/template preview) is what the console builds on.
BridgeLink WebAdmin requires a BridgeLink server running 26.3.0 or newer. The legacy Java Swing administrator remains fully supported, and both clients can be used against the same server, so you can adopt WebAdmin at your own pace.
Full documentation, Docker deployment (innovarhealthcare/bridgelink-webadmin), and source: github.com/Innovar-Healthcare/BridgeLink-WebAdmin
Prefer Docker? docker pull innovarhealthcare/bridgelink-webadmin:latest
BridgeLink 26.6.1 is a security patch for the 26.6 line. It fixes four published security flaws (CVEs) and changes nothing else about how channels behave, apart from the few cases listed below. If you run 26.6.0, apply it. 26.9.0 remains the current forward release.
Java 21 is now recommended for every BridgeLink server, and it is the Java version the installers set up by default. Java 17 remains supported for now, with one exception covered in the next section.
| Item | 26.6.0 | 26.6.1 |
|---|---|---|
| Java runtime the installers set up | Eclipse Temurin 17.0.15 | Eclipse Temurin 21.0.12.1 |
| Java versions BridgeLink accepts | 17 to 21 | 17 to 21 |
| Java 17 on an external database | Supported | Supported |
| Java 17 on the built-in Derby database | Supported | Not supported, stops at startup |
.exe and .msi): set up Java 21 for the BridgeLink install.java-17-openjdk-headless or the java-21-openjdk-headless package. If your server uses the built-in Derby database, install the Java 21 package and make sure it is the Java that BridgeLink runs on..zip and macOS .tgz archives: these include no Java at all. Install Java 21 yourself before you start BridgeLink from one of them.If you have added your own JAR files to BridgeLink, through custom code templates, a custom connector, a JDBC driver for a database we do not ship, or anything in the custom-lib folder, check that each one runs on Java 21 before you move a server to it. Older libraries may need an upgrade, and a few very old ones may not have a Java 21 build at all.
logs/mirth.log on the first start for UnsupportedClassVersionError or NoClassDefFoundError, which are the usual signs of a library that cannot run on the newer Java.Java 18 changed the default text encoding on Windows from windows-1252 to UTF-8. So a Windows server that moves from Java 17 to Java 21 during this upgrade may read and write text differently, even though BridgeLink itself did not change.
logs/mirth.log ends with with charset .... On Java 17 on Windows it usually says windows-1252; on Java 21 it says UTF-8.blservice.vmoptions in the BridgeLink install folder, then restarting the service:`` -Dfile.encoding=COMPAT ``
server.defaultencoding setting described in the 26.9.0 notes is not part of 26.6.1.If your BridgeLink server uses the built-in Derby database, it needs Java 21 to start. This is the one exception to Java 17 still being supported, and there is no setting that turns it off.
To see which one you have, open conf/mirth.properties and look at the database line. database = derby means the built-in Derby database. It is the default for a new install.
| Your server's database | On Java 17 | On Java 21 |
|---|---|---|
Built-in Derby (database = derby) | Stops at startup | Runs |
| External database (PostgreSQL, MySQL, SQL Server, Oracle) | Runs, unaffected | Runs, recommended |
BridgeLink 26.6.1 checks the Java version when it starts, before it does anything else.
database = derby and the Java version is lower than 21. If both are true, the server logs this line at the ERROR level and exits:`` embedded Derby requires Java 21+ as of 26.6.1; upgrade Java or switch to an external database `` It exits cleanly, before it opens the database, so nothing is changed on disk.
logs/mirth.log naming the Java version, the database type and the default character set, for example:Running OpenJDK 64-Bit Server VM 21.0.12 on Windows Server 2022 (...), derby, with charset UTF-8. If that line says 17 and derby, the server will not come up.
The built-in Derby database library is upgraded to close CVE-2022-46337, a flaw in Derby's LDAP login check that could let someone get past authentication. LDAP is a directory service that some systems use to check user names and passwords.
| Library | Before | After |
|---|---|---|
| Apache Derby (derby, derbyshared, derbytools) | 10.16.1.1 | 10.17.1.0 |
conf/mirth.properties ends the database.url line with upgrade=false. With that setting, 26.6.1 opens your existing database without rewriting it, so you can still roll back to 26.6.0 if you need to.upgrade=true. That tells Derby to rewrite the database files into the 10.17 format. The rewrite is one-way: after it, 26.6.0 can no longer open the database.These three fixes answer CISA advisory ICSMA-26-253-01. Two are XML external entity (XXE) flaws, where a crafted XML document makes the server read a file or call a web address it should not. The third is a SQL injection flaw, where crafted input gets run as a database command. They are the same fixes that ship in 26.9.0.
<!DOCTYPE ... SYSTEM "..."> line) now fails the step, with the error logged at the ERROR level. Some older CDA and HL7 v3 feeds carry such a line. Expect those messages to error, and look into them.xsl:import, xsl:include or document(), also fails the step now. If a stylesheet loads a lookup table that way, supply that data another way.XSLT Step: custom TransformerFactory ... rejected. Watch for that line after upgrading.POST /connectors/jdbc/_getTables API, used when you browse tables while setting up a Database Reader or Writer.selectLimit query is run only when it matches one of the shipped safe shapes (SELECT * FROM ? with an optional LIMIT, TOP, WHERE ROWNUM or FETCH FIRST clause). It now runs with a five second timeout and returns at most one row.selectLimit that does not match, or a table or schema name that contains anything other than letters, digits, _, . or $, is not run. BridgeLink reads the columns through the standard database lookup instead. That lookup gives the same column list but can be slower on very large databases.If you would like a hand planning the Java 21 move, testing the upgrade, or getting through the maintenance window, Innovar Healthcare's team can help with as much or as little as you want. Contact support@innovarhealthcare.com.
This release batch-upgrades third-party libraries across all modules (server, client, donkey, CLI, manager, webadmin) to remediate known CVEs - including the netty upgrade addressing CVE-2026-44249, CVE-2026-45416, and CVE-2026-50010, and the log4j upgrade addressing CVE-2026-34477, CVE-2026-34478, CVE-2026-34479, and CVE-2026-34480.
| Library | Before | After |
|---|---|---|
| log4j (api / core / 1.2-api / slf4j2-impl) | 2.25.3 | 2.25.4 |
| netty | 4.1.119.Final | 4.1.135.Final |
| jetty (core + ee8) | 12.0.32 | 12.0.33 |
| commons-io | 2.13.0 | 2.16.1 |
| commons-configuration2 | 2.10.1 | 2.12.0 |
| commons-fileupload | 1.5 | 1.6.0 |
| commons-compress | 1.24.0 | 1.26.0 |
| pdfbox / fontbox / xmpbox | 2.0.24 | 2.0.36 |
| postgresql (JDBC) | 42.7.10 | 42.7.11 |
Server-side usage/registration reporting is now disabled. BridgeLink no longer attempts to send usage statistics to external endpoints.
Older releases could create the message storage tables in lowercase on case-sensitive MySQL servers (lower_case_table_names=0, the Linux default), causing failures when the engine later referenced the uppercase names.
26.6.0 ships a schema migration that automatically renames the lowercase message storage tables to uppercase on first startup.
lower_case_table_names=0 (Linux default); Windows (=1) and macOS (=2) installations are case-insensitive and are skippedServer log lines can now be enriched with the channel context they were emitted from - channelId, channelName, metaDataId, connectorName, messageId, scriptPhase, and scriptLine - making multi-channel log triage dramatically easier.
log.channelcontext.enabled=true in mirth.properties (default: false, legacy log format preserved)log4j2.properties console and rolling-file patterns updated to include the new context fieldsHistory views (Channel, Code Template, Global Scripts, Library) now support a configurable maximum number of commits to load, preventing slow loads and timeouts on repositories with long histories.
getHistory operations accept an optional limit query parameter (default 0 = no limit)Time-series rollup windows are now replaced atomically using database upserts (MySQL, PostgreSQL, SQL Server, Oracle), preventing duplicate or stale aggregate rows when a rollup window is recalculated.
Core support for declarative, engine-served plugin UIs in the WebAdmin:
GET /extensions/_webadmin - JSON listing of every installed and enabled extension carrying a webadmin/webadmin.json manifestGET /extensions/{extensionName}/webadmin/defaults/{transportName} - XML serialization of a connector's default propertiescacheSize = 0 no longer failsmirth.properties| Key | Description |
|---|---|
log.channelcontext.enabled=false | Opt-in channel-context enrichment of server log lines |
log4j2.propertiesConsole and rolling-file layout patterns now include the optional channel-context fields (channelId, channelName, metaDataId, connectorName, messageId, scriptPhase, scriptLine); they render only when channel-context logging is enabled.
BridgeLink 26.6.0 introduces BridgeLink WebAdmin - a modern, browser-based administration console for the BridgeLink integration engine, and a replacement for the legacy Java Swing administrator. It runs as a lightweight Node.js server and requires no Java runtime and no per-workstation install: point any modern browser (Chrome, Edge, Firefox, or Safari) at it and log in with your existing BridgeLink credentials.
Key capabilities:
BridgeLink WebAdmin requires a BridgeLink server running 26.3.0 or newer. The legacy Java Swing administrator remains fully supported - both clients can be used against the same server, so you can adopt WebAdmin at your own pace.
Full documentation, Docker deployment (innovarhealthcare/bridgelink-webadmin), and source: github.com/Innovar-Healthcare/BridgeLink-WebAdmin
Prefer Docker? docker pull innovarhealthcare/bridgelink-webadmin:latest
BridgeLink Server now refuses to start if the process is launched as root (Linux/macOS) or Administrator (Windows). Running an integration engine as a privileged OS user is a known security risk and is now blocked by default.
server.allowRoot=true in mirth.properties if your environment requires itno_new_privs advisory is applied to the server process; privilege-check log output is suppressed when already running as a non-privileged userThis section only applies if you are keeping the defaultserver.allowRoot=false. If you setserver.allowRoot=trueinmirth.properties, BridgeLink will continue to start as root/Administrator (with a warning logged) and no migration steps are required.
If BridgeLink was previously running as root or Administrator and you are not setting the override, complete the steps below before restarting under 26.3.1.
1. Create a dedicated service account
useradd -r -s /sbin/nologin bridgelinkBridgeLinkSvc), grant it the "Log on as a service" right via Local Security Policy, then assign it to the BridgeLink service in the Windows Services manager.2. Grant the service account write access to the BridgeLink install directory
Without this, the keystore and embedded Derby database will fail to open with an "Access is denied" error. The commands below use the default install paths; substitute your actual path if BridgeLink is installed elsewhere.
icacls "C:\Program Files\BridgeLink" /grant "BridgeLinkSvc:(OI)(CI)F" /Tchown -R bridgelink /opt/bridgelink3. Grant write access to the Derby data directory (if applicable)
If you are using the embedded Derby database, the service account must have write access to the directory configured in database.url in mirth.properties (default: appdata/mirthdb); otherwise Derby will open in read-only mode. Derby is intended for evaluation and testing only - if you are running BridgeLink in production, migrate to one of the supported external database types (MySQL, PostgreSQL, Oracle, SQL Server).
4. Update ownership on files your channels write to disk
Files created while running as root/Administrator are owned by that user and will not be readable or writable by the new service account. Update ownership on all output folders, exports, and any other paths your channels write to.
5. Review channels that execute shell commands, external processes, or listen on ports below 1024
Commands that previously succeeded because BridgeLink ran as root/Administrator may fail under a restricted service account if those operations require elevated privileges. Audit any channel scripts that call Runtime.exec(), JavaScript java.lang.Runtime, or external command connectors. On SELinux-enforcing systems (e.g. Rocky Linux, RHEL), denials that were previously masked by root may also surface after the switch.
The server now detects if the keystore is still protected by the factory-default password. If detected, a warning dialog is presented at login with a one-click regeneration option to replace it with a unique credential.
mirth.properties now ships with secure password policy settings enabled out of the box, replacing the previous permissive defaults (all password.* directives set to 0).
Correction: This feature was incorrectly listed in the BridgeLink 26.3.0 release notes. It was not included in that release. HTTPS/PAT support for Version History is first available in 26.3.1.
Version History's Git integration now supports HTTPS with a Personal Access Token (PAT) in addition to the existing SSH key-based approach. This unblocks organizations where SSH access to GitHub, GitLab, or Bitbucket is restricted at the network level.
https:// remote URL in Version History configuration - no SSH keypair requiredjava.lang.ClassCastException (TransportHttp cannot be cast to SshTransport) that previously occurred when an HTTPS URL was enteredPull, Push, and Reload buttons have been added directly to the Git Status tab panel in Version History, making common remote Git operations accessible without leaving the panel.
getStatistics and getStatisticsPost pipeline operations now accept an optional useStorageStats boolean parameter (default: false). When set to true, statistics are read from persistent storage rather than in-memory counters - useful in clustered or recently restarted environments where in-memory state may not reflect true totals.
favicon.ico) no longer generate spurious inbound channel messagesupgrade=false to mirth.properties to prevent unintended schema upgrades on startup26.3.0 to mirthVersion compatibility lists following the security hardening upgrademirth.properties| Key | Description |
|---|---|
server.allowRoot=true | Opt-in override to allow startup as root/Administrator (not recommended) |
upgrade=false | Prevents unintended Derby schema upgrades on startup |
version | Updated to 26.3.1 |
Upgraded dependencies to address the following CVEs:
โ ๏ธ Note: BridgeLink now requires Java 17 or greater. Jetty has been upgraded from 9.4.x to 12.0.x - this is a major version upgrade.
password.allowusernameenumeration = false (default) ensures consistent error responses regardless of whether a username exists.dir.logs renamed to property.logs - corrects a Log4j 2.x property lookup syntax error that prevented the log directory variable from resolving correctly.BridgeLink 26.3.0 introduces OAuth 2.0 authentication for SMTP email sending (client credentials / XOAUTH2), in addition to the existing None and Basic options. This applies to both the global SMTP server settings and the SMTP Sender connector.
smtp.office365.com:587 (STARTTLS + XOAUTH2)smtpAuth boolean is kept in sync automaticallyNote: Google/GCP client credentials flow is not supported by Google. Microsoft 365 with Azure AD app registration is the primary verified provider.
The Version History plugin (formerly a separate plugin) has been merged into the BridgeLink core product. All users now get built-in Git-backed version control for channels, code templates, and global scripts - no separate plugin installation required.
password.allowusernameenumeration = false - prevents username enumeration when lockout is enabled26.3.0dir.logs renamed to property.logs| Library | Previous | Updated |
|---|---|---|
| Jetty | 9.4.57.v20241219 | 12.0.32 โ ๏ธ major version upgrade |
| javax.mail | 1.5.0 | 1.6.2 |
| log4j | 2.17.2 | 2.25.3 |
| slf4j-api | 1.7.30 | 2.0.16 |
| SLF4J binding | slf4j-log4j12-1.7.30 | log4j-slf4j2-impl-2.25.3 |
| Apache Derby | 10.10.2.0 | 10.16.1.1 |
| PostgreSQL JDBC | 42.6.0 | 42.7.10 |
| SQLite JDBC | 3.43.2.1 | 3.51.2.0 |
| Oracle JDBC | ojdbc8-12.2.0.1 | ojdbc11-23.7.0.25.01 |
| Quartz | 2.3.2 | 2.5.2 |
| MyBatis | 3.1.1 | 3.5.16 |
| Commons Logging | 1.2 | 1.3.3 |
| Commons BeanUtils | 1.9.4 | 1.11.0 |
| Commons Configuration2 | 2.8.0 | 2.10.1 |
| Commons Lang3 | 3.13.0 | 3.18.0 |
| Commons Text | 1.10.0 | 1.12.0 |
| handlebars.js | 4.0.5 | 4.7.8 |
| apache-el / apache-jsp | 8.5.70 (org.mortbay.jasper) | 9.0.102 |
Version 26.3.0 includes a schema migration to add OAuth authentication fields to the SMTP server settings. This migration runs automatically on first startup.
This release delivers major enhancements to the Dynamic Lookup Gateway (DLG), improving flexibility, performance, and usability:
getMatching("group", "%") on very large groups
Apache Derby database does NOT support the JSON data type. JSON-related features are only available when using databases that provide native JSON support.
Note: Please use the compatible BridgeLink Launcher v1.2.0
#74 - @Innovarzweng
#101 - @Innovarzweng
If you are using the source map variables for "mirth_source" or "mirth_type", those have been replaced with "message_source" and "message_type, respectively.
BridgeLink 4.6.0 introduces the Message Trend, A powerful new addition to BridgeLink 4.6 that provides time-series analytics and visualization of message traffic. This feature delivers critical insight into message volumes, processing patterns, and system performance, previously unavailable in the platform.
This release introduces major enhancements to the Dynamic Lookup Gateway (DLG), delivering improved performance, data consistency, and developer productivity. DLG now offers fine-grained control over caching, atomic operations for distributed environments, and better data interoperability across systems.
LookupHelper.getMatching() on SQLServer.#60 - @Seimax
#67 - @joshmc82
DefaultConfigurationController.#70 - @Innovarzweng
BridgeLink Repository
MirthConnect Repository
destinationSet.removeAllExcept doesnโt remove destinations if no match is foundDefaultAlertControllerTest.javaDefaultChannelControllerTest.javaDefaultUserControllerTest.javaCompiledScriptCacheTest.javaGlobalChannelVariableStoreTest.javaGlobalVariableStoreTest.javaListRangeIteratorTest.javaServerUUIDGeneratorTest.javaUserSessionCacheTest.javaserver/src/com/mirth/connect/client/core/ConnectServiceUtil.javaFull Changelog: v4.5.4 โ v4.6.0
Upgraded dependencies to address the following CVEs:
The following JARs are included in the upgrade:
client/lib/commons-vfs2-2.10.0.jar client/lib/guava-32.0.1-jre.jar client/lib/jetty-util-9.4.57.v20241219.jarcommand/lib/commons-vfs2-2.10.0.jar command/lib/guava-32.0.1-jre.jar command/lib/jetty-util-9.4.57.v20241219.jardonkey/lib/database/mysql-connector-j-8.4.0.jar donkey/lib/guava/guava-32.0.1-jre.jarmanager/lib/guava-32.0.1-jre.jarserver/lib/aws/ext/netty/netty-buffer-4.1.119.Final.jar server/lib/aws/ext/netty/netty-codec-4.1.119.Final.jar server/lib/aws/ext/netty/netty-codec-http2-4.1.119.Final.jar server/lib/aws/ext/netty/netty-codec-http-4.1.119.Final.jar server/lib/aws/ext/netty/netty-common-4.1.119.Final.jar server/lib/aws/ext/netty/netty-handler-4.1.119.Final.jar server/lib/aws/ext/netty/netty-resolver-4.1.119.Final.jar server/lib/aws/ext/netty/netty-transport-4.1.119.Final.jar server/lib/aws/ext/netty/netty-transport-native-epoll-4.1.119.Final-linux-x86_64.jar server/lib/aws/ext/netty/netty-transport-native-unix-common-4.1.119.Final.jar server/lib/commons/commons-email-1.6.0.jar server/lib/commons/commons-net-3.9.0.jar server/lib/commons/commons-vfs2-2.10.0.jar server/lib/database/mysql-connector-j-8.4.0.jar server/lib/jetty/jsp/apache-jsp-9.4.57.v20241219-sources.jar server/lib/jetty/jetty-jndi-9.4.57.v20241219.jar server/lib/jetty/jetty-plus-9.4.57.v20241219.jar server/lib/jetty/jetty-security-9.4.57.v20241219.jar server/lib/jetty/jetty-http-9.4.57.v20241219.jar server/lib/jetty/jetty-util-ajax-9.4.57.v20241219.jar server/lib/jetty/jetty-rewrite-9.4.57.v20241219.jar server/lib/jetty/jetty-server-9.4.57.v20241219.jar server/lib/jetty/jetty-annotations-9.4.57.v20241219.jar server/lib/jetty/jetty-webapp-9.4.57.v20241219.jar server/lib/jetty/jetty-util-9.4.57.v20241219.jar server/lib/jetty/jetty-xml-9.4.57.v20241219.jar server/lib/jetty/jetty-continuation-9.4.57.v20241219.jar server/lib/jetty/jetty-io-9.4.57.v20241219.jar server/lib/jetty/jetty-servlet-9.4.57.v20241219.jar server/lib/classgraph-4.8.179.jar
โ ๏ธ Note: BridgeLink now requires Java 17 or greater.
BridgeLink 4.5.4 introduces the Dynamic Lookup Gateway, which centralizes key-value mapping logic. It enables interface developers and administrators to:
This feature significantly reduces duplication and manual effort across interfaces, enhancing overall operational efficiency.
Initial BridgeLink release. Starting with v4.5.3 as our initial release forked from Mirth Connect 4.5.2