Skip to main content

FMD Android 0.14.0 and FMD Server 0.14.0

· 6 min read

The new FMD Android 0.14.0 and FMD Server 0.14.0 releases are available! Command execution and locating are much more reliable now, and FMD Server has a completely rewritten, modern React web frontend.

New web frontend

@lone-cloud has kindly rewritten the FMD Server web UI in React, using Vite and TailwindCSS.

For users, this results in a much nicer looking interface with consistent, modern UI components. Notable improvements include:

  • Light mode. And a setting to switch between theme modes.
  • Ability to view the map in fullscreen.
  • Ability to pass a message when locking the device (fmd lock <message>).
  • Setting to switch between metric and imperial units.
  • The command list is much longer, making nearly all commands available in the web UI. The commands now also have a description.
  • The UI now automatically refreshes the location shown on the map. (Currently by polling after a locate command was sent. In the future maybe with WebSocket push.)
  • If you select "Remember me" during login, the access token and the private keys will now be stored in the browser's local storage. This means you don't need to log in again when you reload the page.

For developers, the modern stack will allow us to more easily add new features. The old stack of static HTML and hand-rolled CSS was very cumbersome work with.

Screenshot of the FMD Server web interface

Executing commands as foreground services

Historically, FMD Android has used background services to execute the commands that it received. Unfortunately, this no longer works as reliable as we would like. We have reports of the background jobs being stopped mid-run, and Android is increasingly more restrictive about apps accessing the location from the background.

Therefore, we have rewritten the command execution to use a foreground service. The only user-facing difference is that (due to Android requirements) FMD now has to show a notification while the work is executing. If you want, you can hide the notification by disabling its notification channel.

Right now, these foreground services are launched on-demand, and exit after the command has finished. We hope that this is sufficient to make FMD work more reliably. An additional "escalation" (that we like to avoid, and have not yet implemented), would be to keep a continuous foreground service running forever.

Improved locating

Historically, FMD had the fmd locate gps command. The name gps was misleading, as under the hood this simply asked Android for the current location. Android would then decide how it resolved that location.

FMD Android 0.14.0 splits this into two options: locate fused and locate gps.

  • fused has the same behavior as previously gps: Android will choose the location provider or a combination thereof (hence the name "fused"). In practice, this is often a network location, since that is faster and more power-efficient than GPS. For example, GrapheneOS has a very reliable network location provider.
  • gps now does what it says: Get a location from GPS/GNSS, and only that.

locate gps has gotten more clever as well: Instead of simply taking the first location that it gets, FMD waits a bit, until the accuracy of the measurements converges and does not improve anymore. This is important, because the first GPS location is usually very rough, and subsequent GPS locations (within the first 10 to 20 seconds) have a heavily improved accuracy.

New command: flash

FMD now has a new command: fmd flash. Just like ring will make an audible noise for a few seconds, flash will cause your camera light/torch to flash for a few seconds. This is a great visual indicator, for example, for finding your phone at night when others are already sleeping.

Additionally, the camera command has a new option: fmd camera back flash. As the name suggests, this will take a photo with a camera flash. And it works with camera front flash, too!

Note: The camera flash option is not yet available on the FMD Server web UI (but the flash command is). But you can send the camera flash command via any of the other transport channels.

Separate delete password

Previously, there was a single "FMD PIN" that:

  • Grants anonymous access to FMD. For example through SMS from a non-allowlisted phone number or through the notification reply transport channel.
  • Authenticates delete commands.

Starting in FMD Android 0.14.0, there is a "delete password" which is separate from the FMD PIN. This provides better separation between the two purposes, and better protects the delete command from abuse. For users who upgrade from an earlier version, this password is initialized to the FMD PIN, if it exists.

Edge channel

The official FMD deployments are now split into two channels: "production" and "edge". This applies to both the Android app and the server:

Going forward, new releases will first be deployed on the "edge" channel. If after some time (one or two weeks), no major issues are reported, the release will be promoted to the production channel. If an issue is found, a patch release will be made and published to the "edge" channel. Then it repeats: if that patch release is stable after a week or two, the release will be promoted to production.

Note that new releases will immediately be available for download on the production channel, too. This allows you to update your production setup earlier, if you want. However, F-Droid won't suggest the update unless you opt-in to "beta updates". And the official FMD Server deployment (server.fmd-foss.org) also won't be updated immediately. If you self-host FMD Server, it is up to you to run your own staging/integration environment where you can test-drive releases.

Think about this as similar to Ubuntu LTS versions: If you are on Ubuntu 24.04 LTS, Canonical will release 26.04 LTS in April 2026. This version is generally good and ready to used. However, because LTS users require extreme stability, the upgrade will not be suggested to LTS users until after 26.04.1 has been released (usually around August).

tip

You can install FMD Android and FMD Android edge in parallel on the same device. This allows you to test the edge channel, and later update the production app. To send commands to FMD Android edge, use fmde locate (note the "e" at the end of the command keyword).

Future work

The command execution reliability improvements have been funded by NLnet. We are already working on other items from that grant, especially the packaging and signing work (tasks 1-3). So stay tuned for more improvements in the coming months!