HL7 Sender


HL7 Sender — Free Download. Message delivery and testing

HL7 Sender is a desktop app for sending, queueing and validating HL7 v2 messages over MLLP, HTTP(S), folders and FHIR R4 destinations. It matches every acknowledgment to its original message, decodes error segments, and reports acceptance or rejection with the exact reason. A built-in test listener simulates a receiving system with configurable rules and failure modes. Messages are stored in a durable SQLite queue before sending, retried with backoff, and moved to a dead-letter queue after repeated failures. The application includes templates, validation profiles, load testing, scheduled sends, TLS security and a command-line tool for scripts and CI.

★★★★★
5.0(1 ratings)
File size: 90.3 MB
The latest version of HL7 Sender is: 1.2.1
Operating system: Windows, Mac OS, Linux
Languages: English
Price: $0.00 USD (Free product)
  • Message sending. Transmits HL7 v2 messages over MLLP using the standard framing of vertical tab, message content and file separator with carriage return. Connect and acknowledgment timeouts are configurable, and the ACK timeout acts as a total deadline so a slow receiver cannot extend it indefinitely. Optional generation of MSH-7 timestamp and MSH-10 unique control ID is available, while the rest of the message is sent exactly as written. Pasted text accepts LF, CRLF or CR line endings, and configurable character sets include UTF-8, ISO-8859-1 and windows-1252. A no-ACK mode supports receivers that never acknowledge, such as a plain NiFi ListenTCP flow.
  • Acknowledgment handling. Processes original acknowledgment codes AA, AE and AR as well as enhanced codes CA, CE and CR. In enhanced mode, application acknowledgments are supported: after a CA, a message whose MSH-16 is AL, ER or SU waits as AWAITING_APP_ACK until the receiver's later AA, AE or AR arrives on the destination's application ACK port, matched by MSA-2. An AE or AR, or no application ACK in time, sends the message to the dead-letter queue, while with ER silence means success. The ACK is matched to the message by MSA-2 equal to MSH-10, and a mismatch is reported instead of being treated as success. ERR segments are decoded in both the v2.5+ layout and the older layout.
  • Durable queue. Stores messages in a local SQLite database before sending, so nothing is lost if the application crashes, the machine restarts or the receiver is down. Strict FIFO ordering per destination with one message in flight preserves HL7 event order. Retry uses exponential backoff with jitter and a maximum number of attempts or unlimited attempts, and the same MSH-10 is used on every retry so the receiver can de-duplicate. A circuit breaker pauses delivery after a number of consecutive failures for a cool-down period, then tries one probe message. Each destination has a configurable ACK policy defining retry or dead-letter behavior on AR, AE, CR, CE, timeout or invalid ACK. The dead-letter queue allows inspection of ACK and ERR details, message editing, re-queueing, deletion and export to JSON. Crash recovery retries a message caught mid-send on restart and flags it as a possible duplicate. Persistent connections reconnect automatically, and the connection is dropped after any ambiguous response so a late ACK cannot be matched to the wrong message. An audit trail records every state change with who, when, from, to and why, plus attempt history with raw ACKs. Pause and resume per destination, Retry now and Move to dead letter help unblock the head of a queue.
  • Bulk import and automation. Imports files, whole folders or N copies of a template into a destination's queue with progress display, cancellation and batch delivery tracking. Reads HL7 batch files with FHS, BHS, BTS and FTS segments including trailer count checks, back-to-back messages with any line endings, and MLLP-framed captures. Folder watch per destination queues files dropped in a folder automatically and moves them to processed or error with a report. Rate limit per destination controls messages per second to protect receivers. A batch import of 10,000 messages from one file completes in about 12 seconds with full validation.
  • Security and multiple destinations. Supports MLLP over TLS and mutual TLS per destination with trust store in PKCS12, JKS or PEM format or system CAs, optional client certificate, hostname verification and allowed protocols TLS 1.3 and 1.2 by default. Certificate expiry warnings appear 30 days ahead on the Queue tab, in the status bar at startup and in the audit trail, and the destination dialog lists every certificate with its expiry date. Passwords are stored in the OS keychain such as macOS Keychain, Windows Credential Manager, GNOME Keyring or KWallet, never in settings, the database or exported files. Optional encryption at rest of the queue database uses SQLCipher with AES-256 and a recovery key. Presets for Mirth Connect, Apache NiFi, an EHR and the local test listener include setup notes, and free-text notes per destination are supported. Destinations export and import as JSON profiles without passwords or messages. Fan-out queues the same message for several destinations, with each copy delivered and tracked on its own. The Test Listener can listen over TLS and require client certificates.
  • Monitoring and alerts. The dashboard shows every destination's state, queue depth, in-flight and dead-letter counts, accepted messages per minute, accept and NACK rates, and average and maximum ACK latency over the last 15 minutes, hour or day. Each card has a per-minute throughput chart, and recent alerts are listed below. Alerts trigger when new messages are dead-lettered with a threshold, when a destination's circuit breaker opens and recovers, and when a TLS certificate expires within 30 days. Delivery uses desktop notifications, a webhook with Slack and Microsoft Teams compatible JSON, and e-mail over SMTP with STARTTLS or SSL. Alerts carry names and counts only, never message content, and are configured in Tools > Alerts and notifications with a Send test alert option. The Logs tab shows the live application log filtered by level and text. A diagnostics bundle from the Tools menu or Logs tab produces a zip with system info, settings, destinations, queue counts, recent alerts and logs, excluding passwords, webhook tokens and message content, and masking anything that looks like a credential in the logs.
  • Templates. Provides variables including ${NOW}, ${NOW:yyyyMMdd}, ${TODAY}, ${SEQ}, ${SEQ:6}, ${UUID}, ${CONTROL_ID}, ${RANDOM:n}, ${RANDOM_MRN}, ${RANDOM_FIRST_NAME}, ${RANDOM_LAST_NAME}, ${RANDOM_DOB} and ${RANDOM_SEX}. Each variable has one value per message and a new value for the next message. Built-in samples cover ADT A01, A03, A04 and A08, ORM, ORU, SIU, MDM and DFT, and custom templates save as plain .hl7 files.
  • Validation. Per destination validation modes are Lenient for structure only, Standard where HAPI findings are warnings, and Strict where findings block sending. An optional HL7 conformance profile in Messaging Workbench XML format adds usage and cardinality rules. Structural checks block sending for missing MSH first, delimiters, MSH-9, MSH-12, segment names or more than one message. HAPI checks structure and data types against the declared version from v2.1 to v2.8.1, and HAPI findings are warnings only.
  • Desktop application. A syntax-highlighted editor shows field names on hover and in a location bar, for example PID-5.1 Patient Name > Family Name (XPN) = DOE, with names taken from the message's own HL7 version. The History tab searches every message by destination, status, type, control ID, text, import batch and date, and exports to CSV with metadata only or JSON with content. The Queue tab shows destinations with live status such as idle, sending, waiting to retry, circuit open or paused, and Pending, Delivered and Dead-letter views. Each message shows its payload, attempts, ACKs and audit trail, and Add to queue on the Sender tab queues the editor's message. The message editor includes a live segment, field and component tree with a validation panel. Built-in samples cover ADT^A01, ADT^A08, ORM^O01 and ORU^R01 with fictitious data, and .hl7 files can be opened. The response panel shows MSA-1, MSA-2, MSA-3, ERR, the raw ACK, the exact message sent, timings and session history. The Test Listener tab provides a mock MLLP receiver that can accept, error, reject, send the wrong control ID, send a malformed response, stay silent or close the connection, with an optional delay, and settings change live while it runs.
  • Testing and simulation. The Load Test tab and hl7send load command open N connections at a target rate for a count or duration, reporting throughput, ACK latency percentiles p50, p95, p99 and max, outcomes, live charts, pass or fail thresholds and a JSON report. Responder rules on the Test Listener answer by message type and field values, send custom responses, save received messages and queue follow-up messages such as an ORU for every order with values copied from the message answered using ${IN:PID-3.1}. Rules export as JSON for hl7send listen --rules. Scheduled sends under Tools > Scheduled sends and hl7send schedule use cron expressions with time zones, copies per run and new control IDs every run. Replay from History or hl7send replay targets the same or another destination.
  • Transforms, transports and FHIR. Transform scripts per destination run JavaScript on each message as it is queued, similar to a Mirth transformer with methods such as msg.set('MSH-6', 'TESTFAC'), msg.remove('NK1') and filter, inside a sandbox with a time limit. Transports besides MLLP allow a destination to send over HTTP(S), to a folder or to a FHIR R4 server with the same queue, retries and dead-letter handling, and more transports such as SFTP or brokers can be added as plugins. HL7 v2 to FHIR R4 conversion provides a live preview of the transaction Bundle on the Sender tab covering Patient, Encounter, RelatedPerson, AllergyIntolerance, Condition, DiagnosticReport, Observations and ServiceRequest, and the hl7send fhir convert and send commands perform the same operation from the command line.
  • Team operation. A shared PostgreSQL database configured under Tools > Queue database and hl7send database lets several computers work on one queue with one delivering at a time and automatic take-over. Users and roles such as viewer, operator and admin provide sign-in for the application and the CLI, hide controls for actions a role may not perform, and record the user's name in the audit trail. User management stays off until the first user is added.
  • Look and feel. Light and dark themes are available under View > Theme with WCAG AA contrast for status colours. Keyboard shortcuts include Ctrl+1 through Ctrl+7 to switch tabs, F5 to refresh, Ctrl+Enter to send and F1 to list all shortcuts. Screen-reader labels cover the editor, tables, dashboard cards and status messages. English and Spanish under View > Language cover the menus, tabs and newer screens. A welcome wizard on first start helps create a destination or use the built-in test listener, test the connection and send a sample message.

HL7 Sender was created by Vijay Amirtharaj Xavier and has been developed as a standalone testing and delivery tool for healthcare integration work. The project is distributed under the MIT license and is written in Java, which allows the same codebase to run on Windows, macOS and Linux. Installers for Windows, macOS on Apple silicon, and Linux include their own Java runtime so no separate Java installation is required. Development has continued since the initial release, with later versions adding enhanced acknowledgment handling, durable queue storage, TLS support, FHIR R4 preview, load testing, scheduled sends and the hl7send command-line tool. The application is intended as a testing tool, and test data should be used instead of real patient data.

Alternatives to HL7 Sender

Latest Programs