Safari on iPhone user agent string

Since iOS 26, Safari reports a frozen OS version ("iPhone OS 18_7") instead of the real one, so iOS 27 devices send it too. Only Version/ reflects the Safari release. Below is a sample user agent string and what each part means.

Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.0 Mobile/15E148 Safari/604.1

At a glance

BrowserMobile Safari 27.0
EngineWebKit 605.1.15
Operating systemiOS 18.7
DevicePhone

String breakdown

FragmentMeaning
Mozilla/5.0Historical compatibility token. Nearly every browser claims "Mozilla/5.0" so that old servers do not serve it broken pages.
iPhoneiPhone.
CPU iPhone OS 18_7 like Mac OS XiPhone system token: iOS 18.7. Frozen since iOS 26 — the real version appears in the Version/ fragment.
AppleWebKit/605.1.15Frozen WebKit token: Safari has reported 605.1.15 for years, and browsers that copy Safari's format send the same value, whatever the real engine version.
KHTML, like GeckoCompatibility note: the engine descends from KHTML and behaves like Gecko. Kept for legacy browser sniffers.
Version/27.0The browser's real version: 27.0 (mainly used by Safari).
Mobile/15E148Fixed build identifier: Safari and other iOS browsers and apps send Mobile/15E148 whatever the real iOS build.
Safari/604.1Safari/WebKit build 604.1 — a compatibility token, not the Safari version. Chromium browsers send it too.

Other forms of this user agent

Request desktop website

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.0 Safari/605.1.15

Use it in code

curl

curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.0 Mobile/15E148 Safari/604.1" https://example.com

Python (requests)

import requests
requests.get("https://example.com", headers={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.0 Mobile/15E148 Safari/604.1"})

Playwright (Node.js)

const context = await browser.newContext({ userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.0 Mobile/15E148 Safari/604.1" });

Source: Safari 26.0 Release Notes · checked September 2026

Related user agents

All user agent strings →

What does your own browser send? Check your user agent →