FMD Server is the home base for FindMyDevice, a free Android app that can locate, ring, lock or wipe a lost phone. Run the server yourself and your phone's whereabouts go to your own box instead of Google's.
On this page
- At a glance
- What it's good for
- Before you install
- There's no admin to sign in as
- Setting up a phone
- When a phone goes missing
- Why it's public, and how private it can be
- Good to know
- Addresses and ports
- Settings
- In its config file
- Works with
- Privacy and security
- What leaves this server
- What LibrePortal turns off
- Sources
- Under the hood
Good to know before you install
FMD Server does nothing on its own: it only answers the FindMyDevice app, which has to be installed on each phone you want to track.
At a glance#
- What it is
- Find My Device Server Security
- Where it opens
- Web Interface
On its own port at
http://your-server:port, orfmd.your-domainonce you have a domain - Updates
- When you choose New versions wait for you to press Update
- Backups
- Included Part of the daily backup when that's switched on
- Copies
- As many as you like Run several copies, each with its own data
What it's good for#
Android's built-in "find my device" works through a Google account. If your phone runs without Google, or you'd rather not hand your location to anyone, FindMyDevice (FMD for short) does the same job with free software. The phone app does the work. FMD Server is where it reports to: the phone sends its position there, and you open the server's web page from any browser to see where the phone is and send it commands, like making it ring at full volume when it's down the back of the sofa.
It suits anyone running a de-Googled phone, and families who want to find each other's phones without a tracking company in the middle. Each phone gets its own account, so one server can look after the whole household.
Before you install#
FMD Server does nothing on its own. Every phone you want to find needs the FMD app (it's on F-Droid), and to receive commands from the server the phone also needs a UnifiedPush distributor, a small app that delivers push messages without Google. FMD's own documentation lists the ones that work. Without a distributor the phone can still send its position to the server, but it won't hear you pressing Ring.
There's no admin to sign in as#
FMD Server has no admin account and no users you create. Each phone registers itself from the FMD app and gets a short FMD ID and a password you choose on the phone. You sign in to the web page with that ID and password. LibrePortal never sees them.
What stops a stranger registering phones on your server is the registration token. LibrePortal generates one at install, and the FMD app has to present it before a phone can join. Without it, anyone who found the page could fill your server with accounts.
Where the token is
The install output says the token is in the app's settings, but for now it isn't on the Config tab or in the Welcome dialog. Read it from the command line on the server:
sudo -u libreportal libreportal secret get fmd CFG_FMD_REGISTRATION_TOKEN_1
It only prints to a terminal, so it can't end up in a log by accident. To check: the install hook says the token is 'in this app's settings, as Registration Token, behind the reveal button', but there's no Config-tab field or LOGIN_KEYS entry for it; update this once the WebUI shows it
Setting up a phone#
- Install FMD and a UnifiedPush distributor on the phone.
- Grant only the permissions you need. FMD asks for a permission per command: location for finding it, camera for taking a picture, and so on. Its developers recommend granting just the ones for commands you plan to use.
- Point it at your server. In FMD's server settings, enter your FMD Server's address exactly as you open it in a browser (the Web Interface button shows it), then the registration token, then a password for this phone.
- Write down the FMD ID the app shows. That and the password are how you sign in to the web page when the phone is lost, which is exactly when you can't look at the phone.
Set up a second phone the same way. Each gets its own ID and password.
When a phone goes missing#
Open FMD Server from any browser, sign in with the lost phone's FMD ID and password, and you'll see its last reported position on a map, with its history. From there you can send it commands. The ones people reach for first are asking for a fresh location, ringing it, locking it with a message for whoever finds it, and taking a picture with its camera. Wiping the phone is there too, as a last resort, and it can't be undone.
The server keeps the last 500 positions and 10 pictures per phone. Location History and Photo History change those numbers; they're in the app's config file for now (see Settings below).
FMD can also take commands by text message, without the server at all, which is worth setting up as a backup. That's all in the FMD app.
Why it's public, and how private it can be#
FMD Server's port is open to anyone who can reach your server, and that's deliberate. A lost phone is almost never on your home Wi-Fi, so it has to be able to reach the server from wherever it is. Two things keep that safe. Nobody can register a phone without the token. And every position and picture is encrypted on the phone before it's sent, using a key only your password opens, so the server stores something it can't read itself. Your browser does the decrypting when you sign in.
If you'd rather nothing about it faced the internet, make the port private and have your phones report over the LibrePortal VPN instead. The catch is that a phone which has lost its VPN connection can't report, which is often the situation you're in when it's lost.
With a domain and Traefik, the web page is also at fmd.<your domain> over HTTPS, which is the tidiest address to give the app.
Good to know#
- The map talks to OpenStreetMap. When you look at a position on the web page, your browser fetches map tiles from OpenStreetMap's public servers, which see which area you're looking at (not the phone's decrypted data). If you run your own tile server, point Map Tiles at it.
- Updates wait for you. FMD doesn't publish a "latest" version, and the phone app and server have to stay compatible, so LibrePortal pins an exact release (0.14.2). Update only brings rebuilds of that release, and although the Updates tab may offer a newer one, Upgrade can't move FMD Server to it yet.
- It's small. One container, a single database file, no separate database server.
- Backups include the database, so your phones' accounts and their encrypted history come back with a restore.
- You can run more than one. It's one of the apps that can run as several copies, each with its own data and token, for example one per family.
Addresses and ports#
FMD Server has one port. LibrePortal picks a free port number for each when you install, so yours will differ from anyone else's. The Config tab's Network section shows them, and the app's Open button uses the right one. "Anyone" means it's reachable from wherever your server is reachable; you can make it private later.
| What it is | Who can reach it | With a domain |
|---|---|---|
| Web Interface | Anyone | fmd.your-domain |
Settings#
In its config file#
FMD Server's own settings aren't on the Config tab yet. They live in the app's config file, described here so you know they exist. How to change them.
| Setting | What it does | Starts as |
|---|---|---|
NameCFG_FMD_DISPLAY_NAME |
What this app is called on your dashboards. Leave empty to use its usual name | Empty |
Show on the LibrePortal DashboardCFG_FMD_SHOW_ON_DASHBOARD |
Whether this app gets a shortcut on the front page of the LibrePortal WebUI, separate from any Dashy dashboard Choices: true, false |
true |
Map TilesCFG_FMD_TILE_SERVER_URL |
Where the map on the web page is fetched from. Empty uses OpenStreetMap's public tile servers, which see the coordinates you look up | Empty |
Location HistoryCFG_FMD_MAX_SAVED_LOCATIONS |
How many reported positions to keep per device | 500 |
Photo HistoryCFG_FMD_MAX_SAVED_PICTURES |
How many camera pictures to keep per device | 10 |
Works with#
These are the other apps FMD Server knows how to work with. Once it's installed, its page shows the same list with whether each one is connected. How this works.
- Grafana: Shows dashboards for the apps that have one. works with every app
- Prometheus: Collects metrics from the apps that can export them. works with every app
- Uptime Kuma: Watches your apps and shows when one goes down. works with every app
Privacy and security#
Worth knowing FMD keeps your phone's location history on your own server. The map pictures come from OpenStreetMap, which can see roughly where on the map you are looking.
What leaves this server#
- Map tiles are loaded from OpenStreetMap by each viewer's browser
- Push commands to your phone go through the notification service your phone chooses
What LibrePortal turns off#
Nothing needed switching off.
Licence: GPL-3.0. Audited: 21 October 2026. See the privacy of every app and the Promise.
Sources#
Under the hood#
- It runs this image:
registry.gitlab.com/fmd-foss/fmd-server:0.14.2@sha256:bc04b95d863ba9ae605cea1258f629321692b60e5ab51a40a6361bd4b5477ba7. The version is pinned, and moves only when you update it. - It can sit behind Authelia's sign-in once Authelia is installed.
- Its own project and documentation: gitlab.com/fmd-foss/fmd-server
Ports, settings, tools and connections on this page are read from LibrePortal v0.10.97's app catalogue each time the guide is built.