Table of Contents

AeroPad App Development

AeroPad is written in HTML and Javascript and communicates with LRM through the LRM Data Connector (technically known as “LRM REST Services”).

LRM has a built-in, super light-weight web server that can host static content as well as providing a handful of REST API (JSON) endpoints that enable app developers to retrieve various types of data from LRM as well as cloud services provided by FsHub.

These endpoints are documented in the LRM REST Services document.

Although LRM provides a number of useful API endpoints for you to use, you can also, build your own API's on your own server(s) and access data using AJAX within your AeroPad app - this is, however, beyond the scope of this project but if you would like to know further information about this you can visit our Developer Discussion forum and we will get back to you as quickly as possible.

Minimum app requirements

The absolute minimum requirements for building an AeroPad app consists of the following files:

The above files are adequate for, what we will refer to as a “redirect app” - A “redirect app” is essentially just a redirect to an external website or application that may be run on your own server or an externally hosted service that provides useful content to a virtual pilot such as FuelPlanner.com.

There are two apps that are provided by AeroPad that, by default utilise this type of app configuration, these being “My FsHub” and “FsHub Rader” app - both of these “apps” technically just redirect to specific pages on FsHub.

In order to build a true app (an app that loads its content locally), the addition of an HTML file (this should be named index.html and placed in the root of your plugin folder to ensure that it is loaded when you click on the app icon in the AeroPad EFB) and for the majority of apps (unless you just want a static page ), one or more JavaScript files too - these can be named however you like as you are responsible for referenced them from your plugins' index.html file.

How to create a new plugin

All plugins are located in their own dedicated plugin folder and are located (installed to) the following directory:

C:\Program Files (x86)\Landing Rate Monitor\ws\plugins

During development or, once your application is ready to ship, you can manually copy your plugin folder into this directory and then refresh your AeroPad screen, the app icon should then appear (assuming you have setup the lrm-plugin.json in the root of the plugin folder too and correctly referenced the icon file).

You should create a new folder in this directory and name it something that relates to your plugin, it is, however, recommended to avoid using spaces in the filename and, by convention, use lowercase characters only.

Once the folder is created, you should set up your lrm-plugin.json file, you can use the following content as a base for your new plugin:

{
  "name": "My App",
  "description": "This will appear in the app manager when browsing available apps to install, update or uninstall.",
  "icon": "your-icon-file.png",
  "developer": "Your Name",
  "url": "https://your-website.com",
  "version": "1.0.0",
  "open_mode": "same",
  "remote_app_url": null
}

Once you have created the lrm-plugin.json file using the above template, you should replace each of the property values with your own values (see below for details of what each property is and how to use them).

Next, assuming you do not intend on just making a “redirect” app, you should now create an HTML file in the root of your plugin folder, this file MUST be named index.html - you can add other HTML files to the root of your plugin folder too but the index.html file is the file that will get loaded when a user clicks on the icon in the AeroPad home screen and therefore should be considered as the “bootstrap” file.

The lrm-plugin.json file

The lrm-plugin.json file is used by both LRM and AeroPad to correctly display your app in the AeroPad home screen; it is also used by the “App Manager” (app store) app to display information about your app and enables a user to install it (if you publish your app to the store), update it and/or remove it from their AeroPad.

The JSON schema details and properties are as follows:-

Example lrm-plugin.json manifests

Here is the actual lrm-plugin.json file that the “FsHub Radar” app uses, as you can see, it specifies a remote app URL and therefore, will, when the user clicks on the icon, will open a new tab (the open_mode option is ignored for the remotely hosted app) and load the remote webpage:

{
  "name": "FsHub Radar",
  "description": "View all active flights on FsHub's world radar'",
  "icon": "fshub-radar.png",
  "developer": "LRM Client",
  "url": "https://lrmclient.com",
  "version": "1.0.0",
  "open_mode": "same",
  "remote_app_url": "https://fshub.io/radar"
}

The Aircraft Monitor app on the other hand has its own index.html file and as you will notice from the lrm-plugin.json file below, it does not specify a remote_app_url - this is the defining factor as to if AeroPad will load the apps' index.html file from the root of the plugin folder or if it will load the remote URL as specified in the remote_app_url property.

{
  "name": "Aircraft Monitor",
  "description": "An aircraft monitor app for the AeroPad.",
  "icon": "monitor-icon.png",
  "developer": "Bobby Allen",
  "url": "https://lrmclient.org",
  "version": "1.0.0",
  "open_mode": "same",
  "remote_app_url": null
}

Design language - the "back" button

We do not enforce how your app should look or work on AeroPad but we do recommend, especially for apps that use the self option in the lrm-plugin.js's open_mode setting that the app developer uses the following HTML snippet to add a standardised back button that users will become familiar with across all apps enabling them to quickly and easily navigate back to the AeroPad home screen.

We recommend that this HTML snippet is placed directly below your HTML files' <body> tag (this specifically uses “absolute placement” to ensure that it is easier for developers to integrate into their pages without breaking their content.

You may wish to update the margin parameters of the code template below (to make it fit better in your app's interface):

<!-- Standard AeroPad "Back Button"-->
<span style="position: absolute; top: 0; margin-top: 5px; margin-left: 5px; z-index: 1000;">
        <a href="/plugins/" class="text-light">
            <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" fill="#FFFFFF"
                 class="bi bi-arrow-90deg-left" viewBox="0 0 32 32">
                <path fill-rule="evenodd"
                      d="M1.146 4.854a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 4H12.5A2.5 2.5 0 0 1 15 6.5v8a.5.5 0 0 1-1 0v-8A1.5 1.5 0 0 0 12.5 5H2.707l3.147 3.146a.5.5 0 1 1-.708.708l-4-4z"/>
            </svg>
            <i class="bi bi-arrow-90deg-left"></i>
        </a>
    </span>
<!-- End Standard AeroPad "Back Button"-->

Downloadable resources

These are some example files and templates that can be used by developers to test or use as a starting point.

Deploying your app to the AeroPad app store (App Manager)

Whilst you can personally distribute your app by sending the plugin folder to whoever you would like and providing them the instructions as to how to install it (essentially telling them to copy the LRM installation directory and to paste it into the ws\plugins folder) we are currently in the process of building an “app store” style system (this is yet to be released).

In future, however, developers will be able to upload their plugin folder to a dedicated packages website that we will be releasing shortly, when developers release updates to their AeroPad apps they can simply re-upload the plugin to the new packages website and LRM will automatically alert users that new updates are available for your app.

The packages site will also provide download stats and metrics to app developers (you can see how many installs, uninstalls and updates users have performed against one or more of your published apps!

The benefits of publishing your apps through the “App Manager” system as opposed to manually distributing them are as follows:-

The App Manager will ONLY provide the services for “free apps” - if you wish to make and sell as a premium app then you will be responsible for distributing your app(s).