Built on Rust · WASM · Tauri · Real protocol implementation

Exactly how LISBridge moves data from your instrument to your HIS.

No black boxes. This is the actual technical pipeline — serial handshake, WASM parsing, HMAC authentication, AES-encrypted licensing — explained in plain language.

35
supported instruments
4 steps
from plug-in to HIS delivery
HMAC
SHA-256 auth on every parse call
~30 min
average setup time per instrument
The full pipeline

4 steps. No black boxes.

Every line of real code, explained plainly. From the first byte off the wire to the POST that reaches your HIS.

01

Connect your instrument

RS-232 serial or TCP/IP — auto-detection in seconds

Plug your instrument into the lab computer via RS-232 serial cable, or configure it to send data over your LAN via TCP/IP. LISBridge opens the port, reads the first bytes of data off the wire, and automatically identifies the instrument model — without you selecting anything. It then applies the correct message-framing rules for that exact machine before a single result is processed.

Under the hoodFor serial connections, LISBridge implements the full ASTM layer-2 handshake: it responds to ENQ with ACK, handles STX/ETX frame boundaries, and sends ACK after each EOT. COBAS machines get a dedicated 15-second timeout window because they send individual R| records that need reassembly. For TCP, a Tokio async listener accepts multiple concurrent instrument connections on configurable ports.
RS-232 serial with configurable baud rate (default 9600)
TCP/IP listener — multiple instruments on separate ports
Full ENQ / ACK / EOT / STX / ETX handshake on serial
Auto-detection from first bytes — no manual instrument selection
Auto-restore on startup — connections survive app restarts
02

Identify the instrument and wait for a complete message

Per-machine completeness rules — not a generic timeout

Before parsing anything, LISBridge reads enough bytes to identify the exact machine model. Each instrument has a different definition of 'message complete' — a generic timeout approach loses data. LISBridge applies machine-specific rules: COBAS C311/E411 waits for an L|1|N terminator followed by a 2-character hex checksum. Rayto CBC (HL7 format) waits until it sees MSH + OBR + at least 20 OBX segments. Abacus 380 waits for an ETX byte, or for the buffer to contain WBC/RBC/PLT graph data.

Under the hoodMachine identification uses the first line of raw bytes: H7600 → COBAS C311, ACCP1 → ADVIA CP, Laura XL → Laura XL, MSH| + Rayto → Rayto CBC, DIM prefix → Dimension RxL, mtrsl prefix → MiniVidas, Serial No. in data → Abacus 380. If identification is still unknown at 5 seconds of silence, LISBridge falls back to generic ASTM framing detection.
35 instrument profiles — each with its own completeness rule
COBAS: L|1|N + 2-char hex checksum required
Rayto CBC: MSH + OBR + ≥ 20 OBX segments required
Abacus 380: ETX byte or WBC/RBC/PLT graph data present
5-second generic fallback for unrecognised instruments
03

Parse with the WASM engine

Rust-compiled WASM running inside wasmtime — authenticated per call

Once a complete message is buffered, LISBridge passes it to the WASM parser. The parser runs as a compiled Rust binary inside a native wasmtime runtime — not in a browser, not in Node.js. Every single parse call is authenticated: LISBridge generates an HMAC-SHA256 signature from your machine's hardware ID and the current Unix timestamp, passes it into the WASM sandbox, and the parser verifies it before touching any data. An invalid or expired signature returns AUTH_FAILED immediately.

Under the hoodProtocol routing inside the parser: data starting with H| → ASTM v1 (Sysmex XN-550, ADVIA CP, or generic fallback). Starting with 1H| or 1H space → ASTM v2 (Horiba Yumizen H550, ABX Micros ES-60, Horiba Pentra XLR, Laura XL, COBAS C311/E411). Starting with MSH| → HL7 (with early Rayto CBC detection via 0x0B VT prefix). Starting with DIM → Dimension RxL proprietary format. Starting with mtrsl → MiniVidas proprietary format. Abacus 380 detected before cleaning by Serial No. or Abacus keyword.
Rust-compiled WASM running in native wasmtime (no Node.js, no browser)
HMAC-SHA256 auth — machine ID + timestamp, verified inside the sandbox
ASTM E1394 v1 and v2, HL7 v2.x, Dimension, MiniVidas, Abacus protocols
Returns: order_id · findings (parameter, value, unit) · images (base64 histograms)
Parser version is embedded in every response for full traceability
04

Store, validate, and forward to your HIS

Raw data → findings → HIS endpoint, everything logged permanently

The parsed result is stored in three layers: the original raw bytes go into raw_data, the structured result goes into parsed_data, and each individual test value (WBC, RBC, HGB, etc.) goes into findings. Images — WBC/RBC/PLT histograms and scatter plots extracted as base64 — are stored in the images table. Only then does LISBridge forward the clean, structured result to your HIS endpoint via HTTP POST. If the network is down, results queue and deliver the moment connectivity restores.

Under the hoodThe HIS endpoint URL is user-configurable in Settings. The forwarding request is a standard HTTP POST with structured JSON. Every transmission is logged permanently with timestamp, source port, and parser version. The data retention period is also configurable — set it to 0 to keep all data forever, or to 30 days (default) to auto-purge old records.
Three-layer storage: raw_data → parsed_data → findings + images
WBC, RBC, PLT histograms extracted and stored as base64
HTTP POST to your HIS — endpoint URL configurable in Settings
Offline queue — results deliver automatically when network restores
Configurable data retention (default 30 days, 0 = keep forever)
Bidirectional — the same pipeline also runs in reverse: test orders dispatch from your LIS to 16 order-capable analyzers via HL7 OML or ASTM
The loop closes at the top too — LISBridge pulls pending orders from your HIS/HMS, dispatches them to the analyzer, then returns the result: pull → dispatch → parse → deliver
26 dedicated parsers

Every instrument has its own parser.

Each instrument sends data differently — different protocols, different framing, different quirks. LISBridge has a dedicated, instrument-specific parser for every model below. Generic fallback parsers exist for unknown ASTM and HL7 devices too.

Haematology

Sysmex XN-550Mindray BC-430Mindray BC-760Mindray BC-20sMindray BC-2800Horiba YumizenHoriba Yumizen H550ABX Micros ES-60Rayto CBC AnalyzerDymindCelltech GMission HA-360Faca-280 LABOMEDAbacus 380ADVIA CPLaura XLOrphée Mythic 22 AL

Chemistry & Immunology

COBAS C311COBAS E411Dimension RxLMindray BS-430Diatron Pictus 700Diatron Pictus 500Horiba Pentra 400Horiba Pentra XLRLaura (Horiba Pentra)VIDAS (MiniVidas)Abbott i800Maccura i1000MaglumiYHLO iFlashErba EC90AER 3000JUNOFinecare WonfoFUS 1000CXL PROVIDAS KUBE

Don't see your instrument? Contact us — new parsers ship as silent WASM updates, no app reinstall needed.

Architecture

Why it's built this way.

Every architectural decision in LISBridge exists for a specific reason rooted in lab environment constraints.

WASM parser in wasmtime

The parser is compiled from Rust to WebAssembly and runs inside a native wasmtime runtime embedded in the Tauri app. Zero Node.js, zero Electron overhead. The WASM sandbox provides memory isolation — a parser bug cannot affect the host process.

HMAC-SHA256 per-parse authentication

Every parse call is signed: LISBridge computes HMAC-SHA256(machine_id:timestamp) using a shared secret baked in at compile time. The WASM verifies this before parsing. Tokens are bound to a specific machine and expire with the timestamp — replay attacks are blocked by design.

15-minute CDN polling, zero restart

LISBridge polls cdn.trodad.com/lisbridge/parser-wasm/latest.txt every 15 minutes. If a new version is available, it downloads the manifest, fetches the WASM binary, compiles and validates it, then hot-swaps the running module in memory. Instruments keep parsing throughout — zero downtime, zero restart.

AES-256-GCM encrypted license

Your license key is encrypted with AES-256-GCM before being written to local storage. The decrypted payload is validated against an Ed25519 public key fetched from lisbridge.com/api/license/public-key. An in-memory cache (RwLock) prevents repeated DB hits — license validation costs a single memory read on every parse.

IP Allowlist (v1.18.0+)

You can restrict which IP addresses are permitted to send TCP data to LISBridge. Any connection from an address not on the allowlist is rejected at the socket layer before any data is read. Useful in multi-subnet lab environments.

Rust memory safety

The entire class of memory-safety bugs — buffer overflows, use-after-free, null pointer dereferences — is architecturally eliminated by the Rust compiler at build time. LISBridge cannot crash from the failure modes that bring down C-based and Java-based middleware stacks.

Outbound order pull — no inbound ports

LISBridge fetches pending test orders from your HIS or HMS by polling an HTTP endpoint you configure, authenticated with a global pull token. Because the connection originates from inside the network, no inbound firewall rule, DMZ placement, or static IP is required — the objection that stalls most hospital integrations does not apply. Each pulled payload is stored and indexed, and a node whose endpoint stops responding enters a reachability cooldown rather than retrying in a tight loop.

Reconnect, WAL, and single-instance safety

TCP client connections re-establish themselves with exponential backoff plus jitter after a drop. Local storage runs SQLite in write-ahead logging mode with connection pooling, so results already received survive an unclean shutdown. A single-instance lock — with stale-lock detection after a crash — prevents two copies of LISBridge from competing for the same instruments.

35
supported instruments
15 min
WASM update polling interval
9600
default serial baud rate (configurable)
AES-256
GCM encryption for license keys
Ready to see it live?

Connect your first instrument today.

Download LISBridge, plug in your analyzer, and the full pipeline above — handshake, WASM parse, HMAC auth, HIS delivery — runs automatically. No developer. No config files. No waiting.

Full feature access · No credit card · Cancel anytime · Works on Windows, macOS, Linux