Welcome Developers!
ESM has been designed with developers in mind. We've put a lot of effort into making sure that you can integrate ESM into your own applications and use it on the operating system of your choice. We license all our software, including the developer tools, under the modified BSD license, so you can take advantage of the open source nature of ESM without being locked into a particular licensing scheme.
ESM Developer Tools
ESM provides several tools to make including ESM functionality in your application quick and easy.
ESM Engine

If you've ever wondered how ESM Web Viewer manages to connect computers to a peer-to-peer network from within a Web browser, ESM Engine is the answer. ESM Engine provides URL protocol handlers and a straightforward sockets-based API for the ESM system. Using ESM Engine, you can retrieve lists of ESM broadcasts on a server of your choosing and tune into specific events, all without writing a line of code. ESM Engine automatically handles:
- Launching and quitting media players,
- Communicating with the ESM Web server,
- Keeping track of what event the user is tuned into,
- And more!
Have a look at the ESM Engine documentation to learn more about how to communicate with ESM Engine.
Special Note: If you are developing an application in C++ or Objective-C*, be sure to check out the ESM Adapter, a C++ library that automatically handles the Engine sockets API and wraps it in an easy-to-use programming framework.
ESM Adapter

If sending raw commands over sockets doesn't sound like much fun, never fear! ESM Adapter may be just what you're looking for. ESM Adapter is a small (160KB) static library you can link into your own C++ or Objective-C* application. It defines a class for performing the following operations:
- Get a list of all events,
- Get a list of events for a certain user,
- Get details about an event,
- Start an event,
- Stop an event,
- Get the state of the Engine (not running, configuring, running, etc.),
- Set the URL of the ESM Web server.
All of these operations can be performed in a synchronous (blocking) or asynchronous manner, so there's no need to multithread - the Adapter can be integrated into your run loop so you can avoid both threads and polling. Just call the Run()
method every time your run loop executes (using a timer or an idle event, for example), and the results of any asynchronous commands will be sent to your code using a well-defined callback interface. It's like polling, but it's not.
Source Code

The source code to all our developer tools are licensed under the modified BSD License. You are free to download, modify, and use the source code for the ESM developer tools however you see fit, in any project, provided that the terms of the license are upheld.
ESM Clients and ESM Engine
* Since the Adapter defines a C++ class, technically you would need to use Objective-C++ to interact with it.