or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

device-detection.mdindex.mdsystem-information.mdversion-testing.md

version-testing.mddocs/

0

# Version and Testing Utilities

1

2

Advanced functionality for version extraction, device testing, and pattern matching against User-Agent strings.

3

4

## Capabilities

5

6

### Version Extraction

7

8

Extract numeric and string versions of various components from the User-Agent string.

9

10

```javascript { .api }

11

/**

12

* Get the version (as Number) of the given property in the User-Agent

13

* @param key - A key defining a thing which has a version (case-insensitive)

14

* Supported keys: Mobile, Build, Version, VendorID, browser names, OS names

15

* @returns The version as floating-point Number (e.g., 91.0, 14.6) or NaN if version is not found

16

*/

17

version(key: string): number;

18

19

/**

20

* Get the version (as String) of the given property in the User-Agent

21

* @param key - A key defining a thing which has a version (case-insensitive)

22

* Same supported keys as version() method

23

* @returns The "raw" version as String (e.g., '91.0.4472.124', '14_6') or null if version is not found

24

*/

25

versionStr(key: string): string | null;

26

```

27

28

**Supported Version Keys:**

29

30

**Mobile/Browsers**: Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, SailfishBrowser, Gecko, Trident, Presto, Goanna

31

32

**Operating Systems**: iOS, Android, Sailfish, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows NT, Symbian, webOS

33

34

**Usage Examples:**

35

36

```javascript

37

const MobileDetect = require('mobile-detect');

38

39

// Chrome version extraction

40

const chromeMd = new MobileDetect('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

41

console.log(chromeMd.version('Chrome')); // 91.0

42

console.log(chromeMd.versionStr('Chrome')); // '91.0.4472.124'

43

44

// iOS version

45

const iosMd = new MobileDetect('Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X)');

46

console.log(iosMd.version('iOS')); // 14.6

47

console.log(iosMd.versionStr('iOS')); // '14_6'

48

49

// Android version

50

const androidMd = new MobileDetect('Mozilla/5.0 (Linux; Android 11; SM-G991B)');

51

console.log(androidMd.version('Android')); // 11

52

console.log(androidMd.versionStr('Android')); // '11'

53

54

// WebKit version

55

console.log(chromeMd.version('Webkit')); // 537.36

56

console.log(chromeMd.versionStr('Webkit')); // '537.36'

57

58

// Missing version

59

console.log(chromeMd.version('Firefox')); // NaN

60

console.log(chromeMd.versionStr('Firefox')); // null

61

```

62

63

### Device Testing

64

65

Test for specific device types, operating systems, or browser characteristics.

66

67

```javascript { .api }

68

/**

69

* Global test key against userAgent, os, phone, tablet and some other properties

70

* @param key - The key (case-insensitive) to test for

71

* @returns true when the key matches any detected property, false otherwise

72

*/

73

is(key: string): boolean;

74

```

75

76

**Testable Keys:**

77

- **Device Types**: All phone names (iPhone, Samsung, HTC, etc.), tablet names (iPad, Nexus, etc.)

78

- **Operating Systems**: iOS, Android, Windows, BlackBerry, etc.

79

- **Browsers**: Chrome, Firefox, Safari, Opera, Edge, IE, etc.

80

- **Special Categories**: Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch

81

82

**Usage Examples:**

83

84

```javascript

85

const md = new MobileDetect('Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1');

86

87

// Device testing

88

console.log(md.is('iPhone')); // true

89

console.log(md.is('iPad')); // false

90

console.log(md.is('Samsung')); // false

91

92

// OS testing

93

console.log(md.is('iOS')); // true

94

console.log(md.is('Android')); // false

95

96

// Browser testing

97

console.log(md.is('Safari')); // true

98

console.log(md.is('Chrome')); // false

99

console.log(md.is('WebKit')); // true

100

101

// Special categories

102

console.log(md.is('Bot')); // false

103

console.log(md.is('Mobile')); // true (general mobile detection)

104

105

// Case insensitive

106

console.log(md.is('iphone')); // true

107

console.log(md.is('SAFARI')); // true

108

```

109

110

### Pattern Matching

111

112

Test User-Agent string against custom patterns using string or regex.

113

114

```javascript { .api }

115

/**

116

* Do a quick test against navigator::userAgent

117

* @param pattern - The pattern, either as String or RegExp (string converted to case-insensitive RegExp)

118

* @returns true when the pattern matches, false otherwise

119

*/

120

match(pattern: string | RegExp): boolean;

121

```

122

123

**Usage Examples:**

124

125

```javascript

126

const md = new MobileDetect('Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15');

127

128

// String pattern (converted to case-insensitive regex)

129

console.log(md.match('iPhone')); // true

130

console.log(md.match('android')); // false

131

console.log(md.match('webkit')); // true

132

133

// Multiple patterns with OR

134

console.log(md.match('iPhone|Android')); // true

135

console.log(md.match('Android|Windows')); // false

136

137

// Custom regex pattern

138

console.log(md.match(/iPhone/i)); // true

139

console.log(md.match(/OS \d+_\d+/)); // true (matches "OS 14_6")

140

console.log(md.match(/Chrome\/\d+/)); // false

141

142

// Gaming console detection

143

const consoleMd = new MobileDetect('Mozilla/5.0 (PlayStation 4 5.05)');

144

console.log(consoleMd.match('playstation|xbox|nintendo')); // true

145

```

146

147

### Mobile Grade Classification

148

149

Returns the mobile device capability grade (mostly historical, returns 'A' for modern devices).

150

151

```javascript { .api }

152

/**

153

* Returns the mobile grade ('A', 'B', 'C')

154

* @returns One of the mobile grades ('A', 'B', 'C')

155

*/

156

mobileGrade(): string;

157

```

158

159

**Grade Meanings:**

160

- **Grade A**: Full support (modern smartphones and tablets)

161

- **Grade B**: Enhanced support (older capable devices)

162

- **Grade C**: Basic support (very old or limited devices)

163

164

**Usage Examples:**

165

166

```javascript

167

// Modern devices typically return 'A'

168

const modernMd = new MobileDetect('Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X)');

169

console.log(modernMd.mobileGrade()); // 'A'

170

171

const androidMd = new MobileDetect('Mozilla/5.0 (Linux; Android 11; SM-G991B)');

172

console.log(androidMd.mobileGrade()); // 'A'

173

174

// Older devices might return 'B' or 'C'

175

const oldMd = new MobileDetect('Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413');

176

console.log(oldMd.mobileGrade()); // 'B' or 'C'

177

```

178

179

### Static Properties and Methods

180

181

```javascript { .api }

182

/**

183

* Library version string including version number and build date

184

* Format: "<version> <build-date>"

185

*/

186

MobileDetect.version: string; // "1.4.5 2021-03-13"

187

188

/**

189

* Static version of isPhoneSized method for current screen size detection

190

* @param maxPhoneWidth - Maximum logical pixels to be considered as phone (default: 600)

191

* @returns true if current screen width <= maxPhoneWidth, false otherwise,

192

* undefined in server-side environments (no window.screen access),

193

* undefined if maxPhoneWidth < 0

194

*/

195

static isPhoneSized(maxPhoneWidth?: number): boolean | undefined;

196

197

/**

198

* Internal implementation object containing detection rules and methods

199

* Warning: This is for extensibility/monkey-patching only. Methods and structure

200

* may change between versions. Not recommended for production use.

201

*/

202

static _impl: MobileDetectImpl;

203

```

204

205

**Usage Examples:**

206

207

```javascript

208

// Library version

209

console.log(MobileDetect.version); // "1.4.5 2021-03-13"

210

211

// Static screen size testing (browser only)

212

console.log(MobileDetect.isPhoneSized(600)); // true/false/undefined

213

console.log(MobileDetect.isPhoneSized(480)); // true/false/undefined

214

215

// Server-side (always undefined)

216

console.log(MobileDetect.isPhoneSized()); // undefined

217

```

218

219

## Advanced Usage Patterns

220

221

### Comprehensive Device Analysis

222

223

```javascript

224

const md = new MobileDetect(navigator.userAgent);

225

226

// Complete device profile

227

const deviceProfile = {

228

isMobile: !!md.mobile(),

229

deviceType: md.phone() ? 'phone' : md.tablet() ? 'tablet' : 'desktop',

230

manufacturer: md.mobile() || 'Unknown',

231

os: md.os(),

232

browser: md.userAgent(),

233

browsers: md.userAgents(),

234

grade: md.mobileGrade(),

235

versions: {

236

os: md.versionStr(md.os()),

237

browser: md.versionStr(md.userAgent()),

238

webkit: md.versionStr('Webkit')

239

}

240

};

241

242

console.log(deviceProfile);

243

```

244

245

### Feature Detection Based on Capabilities

246

247

```javascript

248

const md = new MobileDetect(navigator.userAgent);

249

250

// Touch interface detection

251

const hasTouch = md.is('Mobile') || md.is('Tablet');

252

253

// High-DPI screen likely

254

const hasRetinaScreen = md.is('iPhone') || md.is('iPad') ||

255

(md.is('Android') && md.version('Android') >= 4);

256

257

// WebKit-based optimizations

258

const isWebKit = md.userAgents().includes('Webkit');

259

260

// iOS-specific features

261

const supportsIOSFeatures = md.is('iOS') && md.version('iOS') >= 13;

262

```

263

264

### User Experience Optimization

265

266

```javascript

267

const md = new MobileDetect(navigator.userAgent);

268

269

// Responsive breakpoint logic

270

const isPhoneSized = md.isPhoneSized(768); // Custom phone threshold

271

const prefersMobile = md.is('Mobile') && isPhoneSized;

272

273

// Performance optimization

274

const isLowEndDevice = md.mobileGrade() === 'C' ||

275

(md.is('Android') && md.version('Android') < 5);

276

277

// Browser-specific polyfills

278

const needsPolyfills = md.is('IE') ||

279

(md.is('Android') && md.version('Android') < 4.4);

280

```

281

282

## Implementation Notes

283

284

- **Caching**: All methods cache results for performance on repeated calls

285

- **Case Sensitivity**: is() method is case-insensitive, match() respects regex flags

286

- **Version Parsing**: version() converts to number, versionStr() returns raw string

287

- **Pattern Updates**: Detection patterns require regular updates for new devices

288

- **Grade Accuracy**: mobileGrade() is largely outdated, most modern devices return 'A'