At Dentally, the best dental software around, all of our customers enjoy the benefits of the cloud. Carefree backups, seamless updates and instant access from anywhere to list just a few. Being cloud based enables us to integrate with numerous other services, from appointment booking to CRM's. You can even develop you own custom integrations using the Dentally API. The move to cloud however did propose one problem.

"How might we communicate with native applications on a users machine?"

For example sharing patients with imaging software from your dental software. For security reasons most modern browsers are sandboxed and cut off from the rest of the operating system. Although this protection is necessary to prevent malicious activity it does pose a problem when trying to integrate cloud software with old fashioned infrastructures.

At Dentally we were able to overcome these problems in a secure fashion by using a combination of browser extensions and a tiny (<40kB) utility program which sits on the users machine. Whenever a user is viewing a patient record, the extension displays a small icon, when the user interacts with this icon it fires a request to the Dentally webpage asking for the patient. Security is built in as Dentally will only respond to a whitelist of selected extensions. Once the patient parameters have been sent as a JSON payload the extension then sends parameters to the Dentally Utility. This then processes the parameters and communicates with the imaging program.


chrome.runtime.sendMessage(chrome_extention_id, {data: {patient: currentPatient}})  

This code snippet runs on Dentally and sends the current patient to the extension. The chrome.runtime is an API built by Chrome which allows data to be sent between different web pages and other extensions. By calling send message we are sending the current patients details to a named Chrome extension.

chrome.runtime.onMessageExternal.addListener(  
  function(request, sender, sendResponse) {
      parameters = processParameters(request.data.patient);
      sendParams(parameters);
    }
  });
  function sendParams(patient) {
    chrome.runtime.sendNativeMessage('com.nj.dentally',
    patient,
    responseHandler
  );
}

This runs within the Dentally extension and listens to messages from the Dentally webpage. Once it processes the patient parameters it then forwards the patents details to the native program using the chrome.runtime sendNativeMessage function.


Once the Dentally executable receives the patient details, they are processed and sent to the pre-configured imaging program. Imaging suites communicate with other programs using an array of different strategies. The most basic of these is simply passing the patients name as arguments when starting the program.

eg. vixwin.exe -I patient ID -N first_name ^ lastname

Because the requirements for the native program are so basic, installation times are sub second, significantly less than the hours dentists have spent in the past installing and updating alternative products.

For more information on the imaging bridge please see the imaging help docs.