Skip to content

Справочник API

getOS

Возвращает одну строку, идентифицирующую текущую операционную систему.

ts
import { getOS } from 'os-detect'

const os = getOS()
// 'ios' | 'macos' | 'android' | 'windows' | 'linux' | 'chromeos' | 'unknown'

Приоритет определения (побеждает первое совпадение):

  1. iOS / iPadOS
  2. Android
  3. ChromeOS
  4. Linux
  5. macOS
  6. Windows
  7. 'unknown'

ChromeOS проверяется раньше Linux, потому что userAgent-строки ChromeOS содержат "Linux" — неправильный порядок проверки привёл бы к тому, что Chromebook определялся бы неверно.

Тип OS

ts
type OS = 'ios' | 'macos' | 'android' | 'windows' | 'linux' | 'chromeos' | 'unknown'

Булевы проверки

Все функции синхронны, не имеют побочных эффектов и кэшируют свой результат после первого вызова.

ts
import {
  detectIsIOS,
  detectIsMacOS,
  detectIsAndroid,
  detectIsWindows,
  detectIsLinux,
  detectIsChromeOS,
} from 'os-detect'
ФункцияВозвращает true, когдаПоведение в Node.js
detectIsIOS()iPhone, iPod или iPad (включая iPadOS 13+)всегда false
detectIsMacOS()macOS-десктоп (корректно исключает iPadOS 13+)process.platform === 'darwin'
detectIsAndroid()телефоны и планшеты Androidprocess.platform === 'android'
detectIsWindows()Windows-десктоп или ноутбук (32-битный и 64-битный)process.platform === 'win32'
detectIsLinux()Linux-десктоп (исключает Android и ChromeOS)process.platform === 'linux'
detectIsChromeOS()устройства ChromeOSвсегда false

Особенность iPadOS 13+

Начиная с iPadOS 13, Safari сообщает Macintosh в строке userAgent. detectIsIOS() корректно обрабатывает это, проверяя navigator.maxTouchPoints > 1. detectIsMacOS() соответственно исключает устройства на iPadOS — вы никогда не получите true от обеих функций на одном устройстве.

Пример — условный рендеринг

ts
import { detectIsIOS, detectIsAndroid, detectIsWindows } from 'os-detect'

if (detectIsIOS()) {
  // показать бейдж App Store
} else if (detectIsAndroid()) {
  // показать бейдж Google Play
} else if (detectIsWindows()) {
  // показать бейдж Windows Store
}

detectIsWindows11

Асинхронная. Возвращает true только тогда, когда detectIsWindows() равно true и проверка Windows 11 прошла успешно.

ts
import { detectIsWindows11 } from 'os-detect'

const isWin11 = await detectIsWindows11() // Promise<boolean>

Браузер — использует navigator.userAgentData.getHighEntropyValues(['platformVersion']) (Chrome 90+ / Edge 90+). Windows 11 сообщает platformVersion >= 13.0.0. Возвращает false, если API недоступен или вызов не удался.

Node.js — использует os.release(). У Windows 11 номер сборки >= 22000. Возвращает false, если импорт не удался.

Немедленно возвращает false, если detectIsWindows() равно false — асинхронная работа не выполняется.

ts
// Различаем Windows 10 и Windows 11
const isWindows = detectIsWindows()
const isWin11 = await detectIsWindows11()

if (isWin11) {
  console.log('Windows 11')
} else if (isWindows) {
  console.log('Windows 10 или старше')
}

Категория устройства

Быстрые грубые проверки, группирующие значения ОС в категории «мобильное» и «десктопное».

ts
import { isMobileDevice, isDesktopDevice } from 'os-detect'

isMobileDevice() // true, если iOS или Android
isDesktopDevice() // true, если macOS, Windows, Linux или ChromeOS

Заметка: isMobileDevice() и isDesktopDevice() не являются взаимоисключающими. Устройство с нераспознанной ОС вернёт false для обеих. На текущем наборе распознаваемых значений ОС пересечений нет.