Skip to content

Plex "Server is Outdated" false error (iOS app)

URL: https://mkdocs.justinsforge.com/memory/general/reference_plex_server_outdated_false_error/

Symptom: iOS Plex app (new experience) shows "Server is Outdated, needs version 1.41.2 or newer" even though the server is on a much newer build. Restarting the server fixes it temporarily, then it reverts within a day or so.

Root cause (diagnosed 2026-06-03): The new iOS app reads the server version from plex.tv's discovery record when off-LAN, not from the server directly. plex.tv had a corrupt cached productVersion (v2.17.0) while the real installed/running binary was 1.43.2.10687. The server log showed MyPlex: mapping state set to 'Mapped - Not Published'Last published value didn't change, we're done. — PMS decided its published data was unchanged and refused to re-push the correct version, so the stale cloud record persisted. A full restart forces one fresh publish (temporary fix) but the server reverts to "nothing changed, don't republish."

Diagnosis path: 1. Confirm real version: ssh plexdpkg -l plexmediaserver + curl -s http://127.0.0.1:32400/identity (look at version= in MediaContainer). 2. Confirm what plex.tv advertises: query https://plex.tv/api/v2/resources?includeHttps=1 with headers X-Plex-Token: <PlexOnlineToken from Preferences.xml> and X-Plex-Client-Identifier: forge-diag-console. Compare productVersion to the real version. Verify clientIdentifier matches local machineIdentifier (rules out a ghost/duplicate server on the account).

Fix (surgical, no stream interruption): toggle the publish pref off then on via the local API — this forces plex.tv to drop and rebuild the discovery record:

PREF="/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Preferences.xml"
TOKEN=$(grep -o 'PlexOnlineToken="[^"]*"' "$PREF" | cut -d'"' -f2)
curl -s -X PUT "http://127.0.0.1:32400/:/prefs?PublishServerOnPlexOnlineKey=0&X-Plex-Token=$TOKEN"
sleep 6
curl -s -X PUT "http://127.0.0.1:32400/:/prefs?PublishServerOnPlexOnlineKey=1&X-Plex-Token=$TOKEN"
Then re-query the resources API to confirm productVersion flips to the real version. On the phone: force-quit the app and reopen (no reinstall / sign-out needed). Preferred over a full systemctl restart plexmediaserver because it doesn't kill active streams (Michael/Kristine).

Recurrence log: first fix 2026-06-03; recurred 2026-06-07 (plex.tv reverted to bogus v2.17.0), toggle reapplied successfully, no stream interruption. Pattern: toggle is reliable but not permanent; cloud record drifts back every few days.

AUTOMATED (2026-06-07): forge_plex_republish_check.sh (canonical in forge/scripts/, deployed to Plex host /usr/local/bin/) runs via forge-plex-republish.timer at 07:00 + 19:00 daily. It compares the real /identity version to plex.tv's advertised productVersion and only toggles publish on mismatch (no-op when they match). Logs to /var/log/forge-plex-republish.log. This is the standing fix; manual toggle below only needed if the script path breaks.

If it recurs and the toggle doesn't stick: remove the device from the account at plex.tv (Authorized Devices) and let it re-register; last resort is unlink/re-claim the server.

Related: [[reference-plex-state]] family streamers Michael (wiebelhaus_fishing) + Kristine. Token lives in Preferences.xml PlexOnlineToken, treat as secret (don't print to logs).

[Claude Code]