Device detection library that analyzes User-Agent strings to identify mobile devices, tablets, phones, operating systems, browsers, and device capabilities
npx @tessl/cli install tessl/npm-mobile-detect@1.4.0Mobile Detect is a JavaScript library that provides comprehensive device detection capabilities by analyzing User-Agent strings. It identifies mobile devices, tablets, phones, operating systems, browsers, and specific device versions for both client-side and server-side environments.
npm install mobile-detectconst MobileDetect = require('mobile-detect');For ES6 modules:
import MobileDetect from 'mobile-detect';For browser usage:
<script src="mobile-detect.js"></script>
<!-- Available as window.MobileDetect -->const MobileDetect = require('mobile-detect');
// Create instance with User-Agent string
const md = new MobileDetect(
'Mozilla/5.0 (Linux; U; Android 4.0.3; en-in; SonyEricssonMT11i Build/4.1.A.0.562) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
);
// Detect device types
console.log(md.mobile()); // 'Sony'
console.log(md.phone()); // 'Sony'
console.log(md.tablet()); // null
// Detect system information
console.log(md.os()); // 'AndroidOS'
console.log(md.userAgent()); // 'Safari'
// Test device characteristics
console.log(md.is('iPhone')); // false
console.log(md.is('android')); // true
// Get version information
console.log(md.version('Webkit')); // 534.3
console.log(md.mobileGrade()); // 'A'Mobile Detect operates through several key components:
Core device identification functionality for determining if a device is mobile, phone, or tablet, along with manufacturer detection.
class MobileDetect {
constructor(userAgent: string, maxPhoneWidth?: number);
mobile(): string | null;
phone(): string | null;
tablet(): string | null;
}Extract detailed information about operating systems, browsers, and User-Agent characteristics from device strings.
class MobileDetect {
userAgent(): string | null;
userAgents(): string[];
os(): string | null;
}Advanced functionality for version extraction, device testing, and pattern matching against User-Agent strings.
class MobileDetect {
version(key: string): number;
versionStr(key: string): string | null;
is(key: string): boolean;
match(pattern: string | RegExp): boolean;
isPhoneSized(maxPhoneWidth?: number): boolean | undefined;
mobileGrade(): string;
}
// Static methods
MobileDetect.version: string;
MobileDetect.isPhoneSized(maxPhoneWidth?: number): boolean | undefined;/**
* MobileDetect constructor
* @param userAgent - The User-Agent string to analyze (required)
* @param maxPhoneWidth - Optional maximum width in pixels to consider as phone-sized
* (default: 600). Only used for isPhoneSized() method in browser environments.
* Has no effect in server-side environments.
*/
class MobileDetect {
constructor(userAgent: string, maxPhoneWidth?: number);
}
/**
* Rule definition interfaces for type safety
*/
interface MobileDetectRules {
[key: string]: string | RegExp;
}
interface MobileDetectComplexRules {
[key: string]: string | RegExp | string[] | RegExp[];
}
/**
* Internal implementation interface (for extensibility and monkey-patching only)
* Warning: These methods are internal and may change between versions
*/
interface MobileDetectImpl {
mobileDetectRules: {
phones: MobileDetectRules;
tablets: MobileDetectRules;
oss: MobileDetectRules;
uas: MobileDetectRules;
props: MobileDetectComplexRules;
utils: MobileDetectRules;
};
detectMobileBrowsers: {
fullPattern: RegExp;
shortPattern: RegExp;
tabletPattern: RegExp;
};
FALLBACK_PHONE: string;
FALLBACK_TABLET: string;
FALLBACK_MOBILE: string;
// Internal methods (not recommended for public use)
findMatch(rules: MobileDetectRules, userAgent: string): string;
findMatches(rules: MobileDetectRules, userAgent: string): string[];
getVersionStr(propertyName: string, userAgent: string): string;
getVersion(propertyName: string, userAgent: string): number;
prepareVersionNo(version: string): number;
isMobileFallback(userAgent: string): boolean;
isTabletFallback(userAgent: string): boolean;
prepareDetectionCache(cache: Object, userAgent: string, maxPhoneWidth?: number): void;
mobileGrade(md: MobileDetect): string;
detectOS(userAgent: string): string;
getDeviceSmallerSide(): number;
}