Question: HL7 Open source libraries


I work on EHR, and I want to use HL7 to communicate with different systems in a medical environment, for that I found apis (Hapi, nHapi, javasig, Everest,) and I don’t know what is the best and what are the selection criteria


Well, what are your selection criteria? The first question is whether you are doing HL7 v2 or v3. Almost certainly, it’s v2. What language are you using? (or want to use).

Here’s some information about the libraries:

  • HAPI: an open-source, object-oriented HL7 2.x parser for Java – it also includes a number of other utilities for using HL7 v2
  • NHAPI: NHapi is a port of the original project HAPI. NHapi allows Microsoft .NET developers to easily use an HL7 2.x object model
  • Javasig: A library of code written to process V3 messages based on the MIF definitions
  • Everest:  Designed to ease the creation, formatting, and transmission of HL7v3 structures with remote systems. Supports CDA R2, and canadian messages

My evaluations:

  • HAPI – a solid well established community, with runs on the board and reliable code. I’d be happy to use this
  • nHAPI – as far as I can tell, not well established, and given it’s for an HIE, I question the long term viability of the community. Unlike HAPI, I never hear of people actually using this
  • Javasig: this is dead – note that the only link I found was to a web archive. You’d have to be desperate to try to use it, though the maintainers might get interested if you did
  • Everest: this has a community of users in Canada, but I’ve not heard of any use outside there. I’m not sure to what degree Mohawk are supporting it (I’ll ask)

You should consider one of the paid libraries – given the amount of hours you’re going to invest in the work (1000s, I bet), a few thousand for a software library and related tools is peanuts. There’s a lot of good choices there (btw, I have one of my own, which doesn’t cost that much).



  1. As for Everest, I can add that we’ve worked with Mohawk to make Everest compatible with the Dutch AORTA specifications. We have 2 vendors (that I know of) that leverage Everest based on that work. These vendors are determined to spread the word.

  2. Colin says:

    Hi Grahame, your link falls: “Can’t open the page ‘’ because of an error: Could not connect to the server”

  3. Peter Jordan says:

    I use nHAPI, for HL7 v2 message validation, in my own workbench application. However it only covers up to, and including, v2.5.

  4. David Clunie says:

    What about MIRTH?

    I don’t use it personally so I can’t recommend it, or any of these others, since I write my own for my very occasional HL7 V2 needs, but it seems at least worth a mention.


    • Grahame Grieve says:

      David, I didn’t mention MIRTH because it’s a bunch of stuff around HAPI (and it’s not an API either). But yes, it’s a viable choice

  5. Jarray Mohamed says:

    Everest Release Candidate 1
    (released in January 2011) includes
    experimental support for HL7v3 universal
    messages. This means that
    Everest is able to communicate with
    systems developed for markets outside
    of Canada.
    =>page 3

  6. The PUMA repository has an HL7 engine for Lazarus and Free Pascal.

  7. Adil DALLI says:

    Hi guys,

    Can someone provide guidance on HOW a typical HL7 interface look like? what are the most basic features ?

    I am about to develop an interface that is going to be used to connect ourphp home-developped HIS to DCM4chee in order to send MWL orders and get MPPS updates.

    Thanks in advance.

  8. Manu says:

    Hi guys i am new to HL7 i am looking for api to work with delphi, please provide valuable suggestions 🙁

  9. Jim says:

    Any versions of HAPI for GNU (non-dot-net) c++ ?

Leave a Reply

Your email address will not be published. Required fields are marked *

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen


%d bloggers like this: