device_detector 0.9.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -9
  5. data/CHANGELOG.md +16 -3
  6. data/README.md +7 -9
  7. data/Rakefile +19 -13
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector.rb +32 -28
  10. data/lib/device_detector/bot.rb +2 -2
  11. data/lib/device_detector/client.rb +3 -2
  12. data/lib/device_detector/device.rb +44 -21
  13. data/lib/device_detector/memory_cache.rb +26 -19
  14. data/lib/device_detector/metadata_extractor.rb +7 -8
  15. data/lib/device_detector/model_extractor.rb +3 -3
  16. data/lib/device_detector/name_extractor.rb +2 -2
  17. data/lib/device_detector/os.rb +121 -111
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +3 -1
  20. data/lib/device_detector/version_extractor.rb +2 -3
  21. data/regexes/bots.yml +840 -20
  22. data/regexes/client/browser_engine.yml +11 -2
  23. data/regexes/client/browsers.yml +909 -108
  24. data/regexes/client/feed_readers.yml +38 -2
  25. data/regexes/client/libraries.yml +76 -2
  26. data/regexes/client/mediaplayers.yml +25 -5
  27. data/regexes/client/mobile_apps.yml +167 -2
  28. data/regexes/client/pim.yml +10 -1
  29. data/regexes/device/cameras.yml +1 -1
  30. data/regexes/device/car_browsers.yml +7 -3
  31. data/regexes/device/consoles.yml +3 -3
  32. data/regexes/device/mobiles.yml +10123 -465
  33. data/regexes/device/portable_media_player.yml +4 -6
  34. data/regexes/device/televisions.yml +18 -4
  35. data/regexes/oss.yml +115 -21
  36. data/regexes/vendorfragments.yml +6 -2
  37. data/spec/device_detector/concrete_user_agent_spec.rb +16 -17
  38. data/spec/device_detector/detector_fixtures_spec.rb +51 -11
  39. data/spec/device_detector/device_spec.rb +28 -48
  40. data/spec/device_detector/memory_cache_spec.rb +60 -28
  41. data/spec/device_detector/model_extractor_spec.rb +3 -3
  42. data/spec/device_detector/version_extractor_spec.rb +5 -6
  43. data/spec/device_detector_spec.rb +60 -69
  44. data/spec/fixtures/client/browser.yml +1785 -262
  45. data/spec/fixtures/client/feed_reader.yml +47 -35
  46. data/spec/fixtures/client/library.yml +112 -3
  47. data/spec/fixtures/client/mediaplayer.yml +32 -37
  48. data/spec/fixtures/client/mobile_app.yml +193 -6
  49. data/spec/fixtures/client/pim.yml +37 -18
  50. data/spec/fixtures/detector/bots.yml +1426 -118
  51. data/spec/fixtures/detector/camera.yml +36 -10
  52. data/spec/fixtures/detector/car_browser.yml +64 -3
  53. data/spec/fixtures/detector/console.yml +80 -26
  54. data/spec/fixtures/detector/desktop.yml +2222 -1589
  55. data/spec/fixtures/detector/feature_phone.yml +151 -42
  56. data/spec/fixtures/detector/feed_reader.yml +186 -121
  57. data/spec/fixtures/detector/mediaplayer.yml +113 -39
  58. data/spec/fixtures/detector/mobile_apps.yml +366 -21
  59. data/spec/fixtures/detector/phablet.yml +2597 -570
  60. data/spec/fixtures/detector/portable_media_player.yml +41 -16
  61. data/spec/fixtures/detector/smart_display.yml +8 -5
  62. data/spec/fixtures/detector/smart_speaker.yml +55 -0
  63. data/spec/fixtures/detector/smartphone-1.yml +5468 -5010
  64. data/spec/fixtures/detector/smartphone-10.yml +9977 -0
  65. data/spec/fixtures/detector/smartphone-11.yml +9891 -0
  66. data/spec/fixtures/detector/smartphone-12.yml +9906 -0
  67. data/spec/fixtures/detector/smartphone-13.yml +9920 -0
  68. data/spec/fixtures/detector/smartphone-14.yml +2662 -0
  69. data/spec/fixtures/detector/smartphone-2.yml +5213 -4635
  70. data/spec/fixtures/detector/smartphone-3.yml +5082 -4533
  71. data/spec/fixtures/detector/smartphone-4.yml +6806 -2625
  72. data/spec/fixtures/detector/smartphone-5.yml +9914 -0
  73. data/spec/fixtures/detector/smartphone-6.yml +9962 -0
  74. data/spec/fixtures/detector/smartphone-7.yml +9899 -0
  75. data/spec/fixtures/detector/smartphone-8.yml +9931 -0
  76. data/spec/fixtures/detector/smartphone-9.yml +9899 -0
  77. data/spec/fixtures/detector/smartphone.yml +5225 -4652
  78. data/spec/fixtures/detector/tablet-1.yml +4691 -4191
  79. data/spec/fixtures/detector/tablet-2.yml +9800 -71
  80. data/spec/fixtures/detector/tablet-3.yml +9959 -0
  81. data/spec/fixtures/detector/tablet-4.yml +4528 -0
  82. data/spec/fixtures/detector/tablet.yml +4664 -4177
  83. data/spec/fixtures/detector/tv.yml +3399 -1048
  84. data/spec/fixtures/detector/unknown.yml +1017 -977
  85. data/spec/fixtures/detector/wearable.yml +61 -0
  86. data/spec/fixtures/device/camera.yml +4 -3
  87. data/spec/fixtures/device/car_browser.yml +9 -2
  88. data/spec/fixtures/device/console.yml +15 -14
  89. data/spec/fixtures/parser/oss.yml +284 -2
  90. data/spec/fixtures/parser/vendorfragments.yml +8 -2
  91. metadata +50 -7
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -27,4 +27,13 @@
27
27
  name: 'Gecko'
28
28
 
29
29
  - regex: 'KHTML'
30
- name: 'KHTML'
30
+ name: 'KHTML'
31
+
32
+ - regex: 'NetSurf'
33
+ name: 'NetSurf'
34
+
35
+ - regex: 'Servo'
36
+ name: 'Servo'
37
+
38
+ - regex: 'Goanna'
39
+ name: 'Goanna'
@@ -1,17 +1,357 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
8
- # Microsoft Edge (newer versions of IE)
8
+ # Safe Exam Browser (https://safeexambrowser.org/)
9
+ - regex: 'SEB/(?:(\d+[\.\d]+))?'
10
+ name: 'Safe Exam Browser'
11
+ version: '$1'
12
+
13
+ # Colibri (https://colibri.opqr.co/)
14
+ - regex: 'Colibri/(?:(\d+[\.\d]+))?'
15
+ name: 'Colibri'
16
+ version: '$1'
17
+
18
+ # Xvast (https://www.xvast.com/)
19
+ - regex: 'Xvast/(?:(\d+[\.\d]+))?'
20
+ name: 'Xvast'
21
+ version: '$1'
22
+
23
+ # Tungsten (https://en.tungsten-start.net/)
24
+ - regex: 'TungstenBrowser/(?:(\d+[\.\d]+))?'
25
+ name: 'Tungsten'
26
+ version: '$1'
27
+
28
+ # Lulumi (https://github.com/LulumiProject/lulumi-browser)
29
+ - regex: 'Lulumi-browser/(?:(\d+[\.\d]+))?'
30
+ name: 'Lulumi'
31
+ version: '$1'
32
+
33
+ # Yahoo! Japan Browser (https://promo-ybrowser.yahoo.co.jp/)
34
+ - regex: 'ybrowser/(?:(\d+[\.\d]+))?'
35
+ name: 'Yahoo! Japan Browser'
36
+ version: '$1'
37
+
38
+ # Lunascape Lite (https://www.lunascape.tv/)
39
+ - regex: 'iLunascapeLite/(?:(\d+[\.\d]+))?'
40
+ name: 'Lunascape Lite'
41
+ version: '$1'
42
+
43
+ # Polypane (https://polypane.app/)
44
+ - regex: 'Polypane/(?:(\d+[\.\d]+))?'
45
+ name: 'Polypane'
46
+ version: '$1'
47
+
48
+ # OhHai Browser (https://ohhaibrowser.com/)
49
+ - regex: 'OhHaiBrowser/(?:(\d+[\.\d]+))?'
50
+ name: 'OhHai Browser'
51
+ version: '$1'
52
+
53
+ # Sizzy (https://sizzy.co/)
54
+ - regex: 'Sizzy/(?:(\d+[\.\d]+))?'
55
+ name: 'Sizzy'
56
+ version: '$1'
57
+
58
+ # Glass Browser (https://github.com/mitchas/glass-browser)
59
+ - regex: 'GlassBrowser/(?:(\d+[\.\d]+))?'
60
+ name: 'Glass Browser'
61
+ version: '$1'
62
+
63
+ # ToGate (https://tmaxanc.com/#!/product-introduce/ToGate)
64
+ - regex: 'ToGate/(?:(\d+[\.\d]+))?'
65
+ name: 'ToGate'
66
+ version: '$1'
67
+
68
+ # VMware AirWatch (https://www.air-watch.com/)
69
+ - regex: 'AirWatch Browser v(?:(\d+[\.\d]+))?'
70
+ name: 'VMware AirWatch'
71
+ version: '$1'
72
+
73
+ # AOL Desktop (https://beta.aol.com/projects/desktop/windows)
74
+ - regex: 'ADG/(?:(\d+[\.\d]+))?'
75
+ name: 'AOL Desktop'
76
+ version: '$1'
77
+
78
+ # Elements Browser (https://elementsbrowser.com/)
79
+ - regex: 'Elements Browser/(?:(\d+[\.\d]+))?'
80
+ name: 'Elements Browser'
81
+ version: '$1'
82
+
83
+ # Light (https://sourceforge.net/projects/lightfirefox/)
84
+ - regex: 'Light/(\d+[\.\d]+)'
85
+ name: 'Light'
86
+ version: '$1'
87
+
88
+ # Steam (https://www.valvesoftware.com/)
89
+ - regex: 'Valve Steam GameOverlay/(?:(\d+[\.\d]+))?'
90
+ name: 'Steam In-Game Overlay'
91
+ version: '$1'
92
+
93
+ # 115 Browser (https://pc.115.com/)
94
+ - regex: '115Browser/(?:(\d+[\.\d]+))?'
95
+ name: '115 Browser'
96
+ version: '$1'
97
+
98
+ # Atom (https://browser.ru/)
99
+ - regex: 'Atom/(?:(\d+[\.\d]+))?'
100
+ name: 'Atom'
101
+ version: '$1'
102
+
103
+ # Firefox Reality (https://mixedreality.mozilla.org/firefox-reality/)
104
+ - regex: 'Mobile VR.+Firefox'
105
+ name: 'Firefox Reality'
106
+ version: ''
107
+
108
+ # AVG Secure Browser (https://www.avg.com/en-us/secure-browser)
109
+ - regex: 'AVG(?:/(\d+[\.\d]+))?'
110
+ name: 'AVG Secure Browser'
111
+ version: '$1'
112
+
113
+ # START Internet Browser (https://play.google.com/store/apps/details?id=fyi.start.web.browser)
114
+ - regex: 'Start/(?:(\d+[\.\d]+))?'
115
+ name: 'START Internet Browser'
116
+ version: '$1'
117
+
118
+ # Lovense Browser (https://www.lovense.com/cam-model/download)
119
+ - regex: 'Lovense(?:/(\d+[\.\d]+))?'
120
+ name: 'Lovense Browser'
121
+ version: '$1'
122
+
123
+ # Delta Browser (https://play.google.com/store/apps/details?id=com.airfind.deltabrowser)
124
+ - regex: 'com.airfind.deltabrowser(?:/(\d+[\.\d]+))?'
125
+ name: 'Delta Browser'
126
+ version: '$1'
127
+
128
+ # Ordissimo (https://www.ordissimo.fr/)
129
+ - regex: '(?:Ordissimo|webissimo3)(?:/(\d+[\.\d]+))?'
130
+ name: 'Ordissimo'
131
+ version: '$1'
132
+
133
+ # CCleaner (https://www.ccleaner.com/ccleaner/browser)
134
+ - regex: 'CCleaner(?:/(\d+[\.\d]+))?'
135
+ name: 'CCleaner'
136
+ version: '$1'
137
+
138
+ # Aloha Browser Lite (https://play.google.com/store/apps/details?id=com.alohamobile.browser.lite)
139
+ - regex: 'AlohaLite(?:/(\d+[\.\d]+))?'
140
+ name: 'Aloha Browser Lite'
141
+ version: '$1'
142
+
143
+ # Tao Browser (https://browser.taobao.com/)
144
+ - regex: 'TaoBrowser(?:/(\d+[\.\d]+))?'
145
+ name: 'Tao Browser'
146
+ version: '$1'
147
+
148
+ # Falkon (https://www.falkon.org/)
149
+ - regex: 'Falkon(?:/(\d+[\.\d]+))?'
150
+ name: 'Falkon'
151
+ version: '$1'
152
+
153
+ # mCent (http://mcentbrowser.com/)
154
+ - regex: 'mCent(?:/(\d+[\.\d]+))?'
155
+ name: 'mCent'
156
+ version: '$1'
157
+
158
+ # SalamWeb (https://salamweb.com/)
159
+ - regex: 'SalamWeb(?:/(\d+[\.\d]+))?'
160
+ name: 'SalamWeb'
161
+ version: '$1'
162
+
163
+ # BlackHawk (http://www.netgate.sk/blackhawk/)
164
+ - regex: 'BlackHawk(?:/(\d+[\.\d]+))?'
165
+ name: 'BlackHawk'
166
+ version: '$1'
167
+
168
+ # Minimo (https://www-archive.mozilla.org/projects/minimo/)
169
+ - regex: 'Minimo(?:/(\d+[\.\d]+))?'
170
+ name: 'Minimo'
171
+ version: '$1'
172
+
173
+ # Wear Internet Browser (https://play.google.com/store/apps/details?id=com.appfour.wearbrowser)
174
+ - regex: 'WIB(?:/(\d+[\.\d]+))?'
175
+ name: 'Wear Internet Browser'
176
+ version: '$1'
177
+
178
+ # Origyn Web Browser (https://en.wikipedia.org/wiki/Origyn_Web_Browser)
179
+ - regex: 'Origyn Web Browser'
180
+ name: 'Origyn Web Browser'
181
+ version: ''
182
+
183
+ # Kinza (https://www.kinza.jp/en/)
184
+ - regex: 'Kinza(?:/(\d+[\.\d]+))?'
185
+ name: 'Kinza'
186
+ version: '$1'
187
+
188
+ # Beamrise (https://web.archive.org/web/20170520043839/http://beamrise.com/)
189
+ - regex: 'Beamrise(?:/(\d+[\.\d]+))?'
190
+ name: 'Beamrise'
191
+ version: '$1'
192
+
193
+ # Faux Browser (https://apps.apple.com/us/app/faux-browser/id472250940)
194
+ - regex: 'Faux(?:/(\d+[\.\d]+))?'
195
+ name: 'Faux Browser'
196
+ version: '$1'
197
+
198
+ # Splash (https://scrapinghub.com/splash)
199
+ - regex: 'splash Version(?:/(\d+[\.\d]+))?'
200
+ name: 'Splash'
201
+ version: '$1'
202
+
203
+ # Meizu Browser (https://www.meizu.com/)
204
+ - regex: 'MZBrowser(?:/(\d+[\.\d]+))?'
205
+ name: 'Meizu Browser'
206
+ version: '$1'
207
+
208
+ # COS Browser (https://sj.qq.com/myapp/detail.htm?apkName=com.qcloud.cos.client)
209
+ - regex: 'COSBrowser(?:/(\d+[\.\d]+))?'
210
+ name: 'COS Browser'
211
+ version: '$1'
212
+
213
+ # Crusta (https://github.com/Crusta/CrustaBrowser)
214
+ - regex: 'Crusta(?:/(\d+[\.\d]+))?'
215
+ name: 'Crusta'
216
+ version: '$1'
217
+
218
+ # Hawk Turbo Browser
219
+ - regex: 'Hawk/TurboBrowser(?:/v?(\d+[\.\d]+))?'
220
+ name: 'Hawk Turbo Browser'
221
+ version: '$1'
222
+ engine:
223
+ default: 'Blink'
224
+
225
+ # FreeU (https://freeu.online/)
226
+ - regex: 'FreeU(?:/(\d+[\.\d]+))?'
227
+ name: 'FreeU'
228
+ version: '$1'
229
+ engine:
230
+ default: 'Blink'
231
+
232
+ # Nox Browser (https://play.google.com/store/apps/details?id=com.noxgroup.app.browser)
233
+ - regex: 'NoxBrowser(?:/(\d+[\.\d]+))?'
234
+ name: 'Nox Browser'
235
+ version: '$1'
236
+ engine:
237
+ default: 'Blink'
238
+
239
+ # Basilisk (https://www.basilisk-browser.org/)
240
+ - regex: 'Basilisk(?:/(\d+[\.\d]+))?'
241
+ name: 'Basilisk'
242
+ version: '$1'
243
+ engine:
244
+ default: 'Goanna'
245
+
246
+ # Sputnik Browser (https://play.google.com/store/apps/details?id=ru.sputnik.browser)
247
+ - regex: 'SputnikBrowser(?:/(\d+[\.\d]+))?'
248
+ name: 'Sputnik Browser'
249
+ version: '$1'
250
+ engine:
251
+ default: 'Blink'
252
+
253
+ # K.Browser (https://play.google.com/store/apps/details?id=com.tnsua.browser)
254
+ - regex: 'TNSBrowser(?:/(\d+[\.\d]+))?'
255
+ name: 'K.Browser'
256
+ version: '$1'
257
+ engine:
258
+ default: 'Blink'
259
+
260
+ # Oculus Browser (https://developer.oculus.com/documentation/oculus-browser/latest/concepts/)
261
+ - regex: 'OculusBrowser(?:/(\d+[\.\d]+))?'
262
+ name: 'Oculus Browser'
263
+ version: '$1'
264
+
265
+ # Jio Browser (https://play.google.com/store/apps/details?id=com.jio.web)
266
+ - regex: 'JioBrowser(?:/(\d+[\.\d]+))?'
267
+ name: 'Jio Browser'
268
+ version: '$1'
269
+ engine:
270
+ default: 'Blink'
271
+
272
+ # hola! Browser (https://hola.org/browser)
273
+ - regex: 'Hola(?:/(\d+[\.\d]+))?'
274
+ name: 'hola! Browser'
275
+ version: '$1'
276
+ engine:
277
+ default: 'Blink'
278
+
279
+ # Huawei Browser
280
+ - regex: 'HuaweiBrowser(?:/(\d+[\.\d]+))?'
281
+ name: 'Huawei Browser'
282
+ version: '$1'
283
+
284
+ # vivo Browser
285
+ - regex: 'VivoBrowser(?:/(\d+[\.\d]+))?'
286
+ name: 'vivo Browser'
287
+ version: '$1'
288
+
289
+ # Realme Browser
290
+ - regex: 'RealmeBrowser(?:/(\d+[\.\d]+))?'
291
+ name: 'Realme Browser'
292
+ version: '$1'
293
+
294
+ # Beaker distributed web browser (https://beakerbrowser.com/)
295
+ - regex: 'Beaker ?Browser(?:[/ ](\d+[\.\d]+))?'
296
+ name: 'Beaker Browser'
297
+ version: '$1'
298
+ engine:
299
+ default: 'Blink'
300
+
301
+ # Qwant Mobile
302
+ - regex: 'QwantMobile(?:/(\d+[\.\d]+))?'
303
+ name: 'Qwant Mobile'
304
+ version: '$1'
305
+ engine:
306
+ default: 'Gecko'
307
+ - regex: 'Qwant/(\d+[\.\d]+)'
308
+ name: 'Qwant Mobile'
309
+ version: '$1'
310
+ engine:
311
+ default: 'Gecko'
312
+
313
+ # TenFourFox
314
+ - regex: 'TenFourFox(?:/(\d+[\.\d]+))?'
315
+ name: 'TenFourFox'
316
+ version: '$1'
317
+ engine:
318
+ default: 'Gecko'
319
+
320
+ # AOL Shield
321
+ - regex: 'AOLShield(?:/(\d+[\.\d]+))?'
322
+ name: 'AOL Shield'
323
+ version: '$1'
324
+ engine:
325
+ default: 'Gecko'
326
+
327
+ # Microsoft Edge (Spartan Edge)
9
328
  - regex: 'Edge[ /](\d+[\.\d]+)'
10
329
  name: 'Microsoft Edge'
11
330
  version: '$1'
12
331
  engine:
13
332
  default: 'Edge'
14
333
 
334
+ # Microsoft Edge for iOS
335
+ - regex: 'EdgiOS[ /](\d+[\.\d]+)'
336
+ name: 'Microsoft Edge'
337
+ version: '$1'
338
+ engine:
339
+ default: 'WebKit'
340
+
341
+ # Microsoft Edge for Android
342
+ - regex: 'EdgA[ /](\d+[\.\d]+)'
343
+ name: 'Microsoft Edge'
344
+ version: '$1'
345
+ engine:
346
+ default: 'Blink'
347
+
348
+ # Microsoft Edge (Anaheim Edge)
349
+ - regex: 'Edg[ /](\d+[\.\d]+)'
350
+ name: 'Microsoft Edge'
351
+ version: '$1'
352
+ engine:
353
+ default: 'Blink'
354
+
15
355
  # 360 Browser
16
356
  - regex: 'QIHU 360[ES]E'
17
357
  name: '360 Browser'
@@ -31,10 +371,17 @@
31
371
  engine:
32
372
  default: 'Gecko'
33
373
 
34
- # SeaMonkey
35
- - regex: '(Iceape|SeaMonkey|gnuzilla)(?:/(\d+[\.\d]+))?'
36
- name: '$1'
37
- version: '$2'
374
+ # IceCat
375
+ - regex: 'IceCat(?:/(\d+[\.\d]+))?'
376
+ name: 'IceCat'
377
+ version: '$1'
378
+ engine:
379
+ default: 'Gecko'
380
+
381
+ # Mobicip
382
+ - regex: 'Mobicip'
383
+ name: 'Mobicip'
384
+ version: ''
38
385
  engine:
39
386
  default: 'Gecko'
40
387
 
@@ -45,6 +392,30 @@
45
392
  engine:
46
393
  default: 'Gecko'
47
394
 
395
+ # Waterfox
396
+ - regex: 'Waterfox(?:/(\d+[\.\d]+))?'
397
+ name: 'Waterfox'
398
+ version: '$1'
399
+ engine:
400
+ default: 'Gecko'
401
+
402
+ #AlohaBrowser
403
+ - regex: 'AlohaBrowser(?:/(\d+[\.\d]+))?'
404
+ name: 'Aloha Browser'
405
+ version: '$1'
406
+
407
+ # Avast Secure Browser | Avast SafeZone Browser (https://www.avast.com/)
408
+ - regex: '(?:Avast|ASW|Safer)(?:/(\d+[\.\d]+))?'
409
+ name: 'Avast Secure Browser'
410
+ version: '$1'
411
+
412
+ #Epic
413
+ - regex: 'Epic(?:/(\d+[\.\d]+))'
414
+ name: 'Epic'
415
+ version: '$1'
416
+ engine:
417
+ default: 'Gecko'
418
+
48
419
  #Fennec (Firefox for mobile)
49
420
  - regex: 'Fennec(?:/(\d+[\.\d]+))?'
50
421
  name: 'Fennec'
@@ -77,6 +448,11 @@
77
448
  engine:
78
449
  default: '' # multiple
79
450
 
451
+ #Oppo Browser
452
+ - regex: 'OppoBrowser(?:/(\d+[\.\d]+))?'
453
+ name: 'Oppo Browser'
454
+ version: '$1'
455
+
80
456
  #Amigo
81
457
  - regex: 'Chrome/(\d+[\.\d]+).*MRCHROME'
82
458
  name: 'Amigo'
@@ -103,6 +479,11 @@
103
479
  engine:
104
480
  default: 'Blink'
105
481
 
482
+ #Iridium
483
+ - regex: 'Iridium(?:/(\d+[\.\d]+))?'
484
+ name: 'Iridium'
485
+ version: '$1'
486
+
106
487
  #Iceweasel
107
488
  - regex: 'Iceweasel(?:/(\d+[\.\d]+))?'
108
489
  name: 'Iceweasel'
@@ -119,6 +500,11 @@
119
500
 
120
501
 
121
502
  #Pale Moon
503
+ - regex: '.*Goanna.*PaleMoon(?:/(\d+[\.\d]+))?'
504
+ name: 'Pale Moon'
505
+ version: '$1'
506
+ engine:
507
+ default: 'Goanna'
122
508
  - regex: 'PaleMoon(?:/(\d+[\.\d]+))?'
123
509
  name: 'Pale Moon'
124
510
  version: '$1'
@@ -148,6 +534,11 @@
148
534
  versions:
149
535
  3: 'WebKit'
150
536
 
537
+ # Jig Browser Plus (https://jig.jp/)
538
+ - regex: 'JigBrowserPlus/(?:(\d+[\.\d]+))?'
539
+ name: 'Jig Browser Plus'
540
+ version: '$1'
541
+
151
542
  #Jig Browser
152
543
  - regex: 'jig browser(?: web;|9i?)?(?:[/ ](\d+[\.\d]+))?'
153
544
  name: 'Jig Browser'
@@ -167,6 +558,61 @@
167
558
  engine:
168
559
  default: 'Gecko'
169
560
 
561
+ # Origin (https://www.origin.com/)
562
+ - regex: 'Origin/(?:(\d+[\.\d]+))?'
563
+ name: 'Origin In-Game Overlay'
564
+ version: '$1'
565
+
566
+ #Cunaguaro
567
+ - regex: 'Cunaguaro(?:/(\d+[\.\d]+))?'
568
+ name: 'Cunaguaro'
569
+ version: '$1'
570
+
571
+ # t-online.de Browser (https://www.t-online.de/computer/browser/)
572
+ - regex: 'TO-Browser(?:/TOB(\d+[\.\d]+))?'
573
+ name: 't-online.de Browser'
574
+ version: '$1'
575
+
576
+ #Kazehakase
577
+ - regex: 'Kazehakase(?:/(\d+[\.\d]+))?'
578
+ name: 'Kazehakase'
579
+ version: '$1'
580
+ engine:
581
+ default: '' # multi engine
582
+
583
+ # ArcticFox (https://github.com/wicknix/Arctic-Fox)
584
+ - regex: 'ArcticFox(?:/(\d+[\.\d]+))?'
585
+ name: 'Arctic Fox'
586
+ version: '$1'
587
+ engine:
588
+ default: 'Goanna'
589
+
590
+ # Mypal (https://github.com/Feodor2/Mypal)
591
+ - regex: 'Mypal(?:/(\d+[\.\d]+))?'
592
+ name: 'Mypal'
593
+ version: '$1'
594
+ engine:
595
+ default: 'Goanna'
596
+
597
+ # Centaury (https://github.com/Feodor2/Centaury)
598
+ - regex: 'Centaury(?:/(\d+[\.\d]+))?'
599
+ name: 'Centaury'
600
+ version: '$1'
601
+ engine:
602
+ default: 'Goanna'
603
+
604
+ #Firefox Focus / Firefox Klar
605
+ - regex: '(?:Focus|Klar)(?:/(\d+[\.\d]+))?'
606
+ name: 'Firefox Focus'
607
+ version: '$1'
608
+
609
+ #Cyberfox
610
+ - regex: 'Cyberfox(?:/(\d+[\.\d]+))?'
611
+ name: 'Cyberfox'
612
+ version: '$1'
613
+ engine:
614
+ default: 'Gecko'
615
+
170
616
  #Swiftfox
171
617
  - regex: 'Firefox/(\d+[\.\d]+).*\(Swiftfox\)'
172
618
  name: 'Swiftfox'
@@ -174,22 +620,39 @@
174
620
  engine:
175
621
  default: 'Gecko'
176
622
 
623
+ #Firefox Mobile
624
+ - regex: '(?:Mobile|Tablet).*Servo.*Firefox(?:/(\d+[\.\d]+))?'
625
+ name: 'Firefox Mobile'
626
+ version: '$1'
627
+ engine:
628
+ default: 'Servo'
629
+ - regex: '(?:Mobile|Tablet).*Firefox(?:/(\d+[\.\d]+))?'
630
+ name: 'Firefox Mobile'
631
+ version: '$1'
632
+ engine:
633
+ default: 'Gecko'
634
+ - regex: 'FxiOS/(\d+[\.\d]+)'
635
+ name: 'Firefox Mobile iOS'
636
+ version: '$1'
637
+ engine:
638
+ default: 'WebKit'
639
+
177
640
  #Firefox
178
- - regex: 'Firefox(?:/(\d+[\.\d]+))?'
641
+ - regex: '.*Servo.*Firefox(?:/(\d+[\.\d]+))?'
179
642
  name: 'Firefox'
180
643
  version: '$1'
181
644
  engine:
182
- default: 'Gecko'
183
- - regex: '(BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)'
645
+ default: 'Servo'
646
+ - regex: 'Firefox(?:/(\d+[\.\d]+))?'
184
647
  name: 'Firefox'
185
- version: '$1 ($2)'
648
+ version: '$1'
186
649
  engine:
187
650
  default: 'Gecko'
188
- - regex: 'FxiOS/(\d+[\.\d]+)'
651
+ - regex: '(?:BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)'
189
652
  name: 'Firefox'
190
- version: 'iOS $1'
653
+ version: '$1'
191
654
  engine:
192
- default: 'WebKit'
655
+ default: 'Gecko'
193
656
 
194
657
  #ANT Fresco
195
658
  - regex: 'ANTFresco(?:[/ ](\d+[\.\d]+))?'
@@ -230,6 +693,59 @@
230
693
  engine:
231
694
  default: '' # Mosaic in the first versions, then Gecko
232
695
 
696
+ #Polarity
697
+ - regex: '(?:Polarity)(?:[/ ](\d+[\.\d]+))?'
698
+ name: 'Polarity'
699
+ version: '$1'
700
+
701
+ #QupZilla
702
+ - regex: '(?:QupZilla)(?:[/ ](\d+[\.\d]+))?'
703
+ name: 'QupZilla'
704
+ version: '$1'
705
+
706
+ #Dooble
707
+ - regex: '(?:Dooble)(?:[/ ](\d+[\.\d]+))?'
708
+ name: 'Dooble'
709
+ version: '$1'
710
+
711
+ # Whale
712
+ - regex: 'Whale/(\d+[\.\d]+)'
713
+ name: 'Whale Browser'
714
+ version: '$1'
715
+ engine:
716
+ default: 'Blink'
717
+
718
+ #Obigo
719
+ - regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?'
720
+ name: 'Obigo'
721
+ version: '$1'
722
+ - regex: 'Obigo|Teleca'
723
+ name: 'Obigo'
724
+ version: ''
725
+
726
+ #UC Browser Mini
727
+ - regex: 'UCMini(?:[ /]?(\d+[\.\d]+))?'
728
+ name: 'UC Browser Mini'
729
+ version: '$1'
730
+ - regex: 'UC[ ]?Browser.* \(UCMini\)'
731
+ name: 'UC Browser Mini'
732
+ version: ''
733
+
734
+ # UC Browser Turbo
735
+ - regex: 'UCTurbo(?:[ /]?(\d+[\.\d]+))?'
736
+ name: 'UC Browser Turbo'
737
+ version: '$1'
738
+ - regex: 'UC[ ]?Browser.* \(UCTurbo\)'
739
+ name: 'UC Browser Turbo'
740
+ version: ''
741
+
742
+ # Opera GX (https://www.opera.com/gx#start | http://ftp.opera.com/pub/opera_gx/)
743
+ - regex: 'OPRGX(?:/(\d+[\.\d]+))?'
744
+ name: 'Opera GX'
745
+ version: '$1'
746
+ engine:
747
+ default: 'Blink'
748
+
233
749
  #Opera
234
750
  - regex: '(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\d+[\.\d]+)'
235
751
  name: 'Opera Mobile'
@@ -238,11 +754,43 @@
238
754
  default: 'Presto'
239
755
  versions:
240
756
  15: 'Blink'
241
- - regex: 'Opera Mini/(?:att/)?(\d+[\.\d]+)'
757
+ - regex: 'MMS/(\d+[\.\d]+)'
758
+ name: 'Opera Neon'
759
+ version: '$1'
760
+ engine:
761
+ default: 'Blink'
762
+ - regex: 'OMI/(\d+[\.\d]+)'
763
+ name: 'Opera Devices'
764
+ version: '$1'
765
+ engine:
766
+ default: 'Blink'
767
+ - regex: 'OPT/(\d+[\.\d]+)'
768
+ name: 'Opera Touch'
769
+ version: '$1'
770
+ engine:
771
+ default: 'Blink'
772
+ - regex: 'Opera/(\d+[\.\d]+).+Opera Mobi'
773
+ name: 'Opera Mobile'
774
+ version: '$1'
775
+ engine:
776
+ default: 'Presto'
777
+ versions:
778
+ 15: 'Blink'
779
+ - regex: 'Opera ?Mini/(?:att/)?(\d+[\.\d]+)'
780
+ name: 'Opera Mini'
781
+ version: '$1'
782
+ engine:
783
+ default: 'Presto'
784
+ - regex: 'Opera ?Mini.+Version/(\d+[\.\d]+)'
242
785
  name: 'Opera Mini'
243
786
  version: '$1'
244
787
  engine:
245
788
  default: 'Presto'
789
+ - regex: 'OPiOS/(\d+[\.\d]+)'
790
+ name: 'Opera Mini iOS'
791
+ version: '$1'
792
+ engine:
793
+ default: 'WebKit'
246
794
  - regex: 'Opera.+Edition Next.+Version/(\d+[\.\d]+)'
247
795
  name: 'Opera Next'
248
796
  version: '$1'
@@ -257,13 +805,13 @@
257
805
  default: 'Presto'
258
806
  versions:
259
807
  15: 'Blink'
260
- - regex: '(?:Opera|OPR)[/ ]?(?:9.80.*Version/)?(\d+[\.\d]+)'
808
+ - regex: '(?:Opera[/ ]?|OPR[/ ])(?:9.80.*Version/)?(\d+[\.\d]+)'
261
809
  name: 'Opera'
262
810
  version: '$1'
263
811
  engine:
264
812
  default: ''
265
813
  versions:
266
- 3.5: 'Elektra'
814
+ '3.5': 'Elektra'
267
815
  7: 'Presto'
268
816
  15: 'Blink'
269
817
 
@@ -282,7 +830,7 @@
282
830
  default: '' # multi engine
283
831
 
284
832
  #Comodo Dragon
285
- - regex: 'Comodo[ _]Dragon(?:/(\d+[\.\d]+))?'
833
+ - regex: '(?:Comodo[ _])?Dragon(?!fruit)(?:/(\d+[\.\d]+))?'
286
834
  name: 'Comodo Dragon'
287
835
  version: '$1'
288
836
  engine:
@@ -314,7 +862,10 @@
314
862
  4: '' # multiple (KHTML or WebKit)
315
863
 
316
864
  #Baidu Browser
317
- - regex: 'baidubrowser(?:[/ ](\d+[\.\d]*))?'
865
+ - regex: '(?:baidubrowser|bdbrowser_i18n|bdbrowser)(?:[/ ](\d+[\.\d]*))?'
866
+ name: 'Baidu Browser'
867
+ version: '$1'
868
+ - regex: 'FlyFlow(?:[/ ](\d+[\.\d]*))?'
318
869
  name: 'Baidu Browser'
319
870
  version: '$1'
320
871
 
@@ -323,10 +874,17 @@
323
874
  name: 'Baidu Spark'
324
875
  version: '$1'
325
876
 
877
+ # Yandex Browser Lite
878
+ - regex: 'YaBrowser(?:/(\d+[\.\d]*)) \(lite\)?'
879
+ name: 'Yandex Browser Lite'
880
+ version: '$1'
881
+ engine:
882
+ default: 'Blink'
883
+
326
884
  #Yandex Browser
327
- - regex: 'YaBrowser(?:/(\d+[\.\d]*))?'
885
+ - regex: 'YaBrowser(?:/(\d+[\.\d]*))(?: \((alpha|beta)\))?'
328
886
  name: 'Yandex Browser'
329
- version: '$1'
887
+ version: '$1 $2'
330
888
  engine:
331
889
  default: 'Blink'
332
890
 
@@ -365,7 +923,7 @@
365
923
  versions:
366
924
  3: 'WebKit'
367
925
 
368
- - regex: '(?:Maxthon|MyIE2|Uzbl)'
926
+ - regex: '(?:Maxthon|MyIE2)'
369
927
  name: 'Maxthon'
370
928
  version: ''
371
929
  engine:
@@ -376,7 +934,20 @@
376
934
  name: 'Puffin'
377
935
  version: '$1'
378
936
 
379
- #Iron
937
+ #MobileIron
938
+ - regex: 'MobileIron(?:/(\d+[\.\d]+))?'
939
+ name: 'Iron Mobile'
940
+ version: '$1'
941
+ engine:
942
+ default: 'Blink'
943
+
944
+ # Iron
945
+ - regex: 'Chrome(?:/(\d+[\.\d]+))?.*Iron'
946
+ name: 'Iron'
947
+ version: '$1'
948
+ engine:
949
+ default: 'WebKit'
950
+
380
951
  - regex: 'Iron(?:/(\d+[\.\d]+))?'
381
952
  name: 'Iron'
382
953
  version: '$1'
@@ -385,19 +956,24 @@
385
956
  versions:
386
957
  28: 'Blink'
387
958
 
388
- #Epiphany
959
+ #GNOME Web
389
960
  - regex: 'Epiphany(?:/(\d+[\.\d]+))?'
390
- name: 'Epiphany'
961
+ name: 'GNOME Web'
391
962
  version: '$1'
392
963
  engine:
393
964
  default: 'Gecko'
394
965
  versions:
395
- 2.9.16: '' # multi engine
396
- 2.28: 'WebKit'
966
+ '2.9.16': '' # multi engine
967
+ '2.28': 'WebKit'
968
+
969
+ # LieBaoFast
970
+ - regex: 'LieBaoFast(?:[ /](\d+[\.\d]+))?'
971
+ name: 'LieBaoFast'
972
+ version: '$1'
397
973
 
398
- # Liebao
974
+ # Cheetah Browser
399
975
  - regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?'
400
- name: 'Liebao'
976
+ name: 'Cheetah Browser'
401
977
  version: '$1'
402
978
 
403
979
  # Sogou Explorer
@@ -405,15 +981,26 @@
405
981
  name: 'Sogou Explorer'
406
982
  version: '$1'
407
983
 
984
+ # QQ Browser Mini
985
+ - regex: 'M?QQBrowser/Mini([\.\d]+)?'
986
+ name: 'QQ Browser Mini'
987
+ version: '$1'
988
+ engine:
989
+ default: '' # multi engine -- WebKit or Blink
990
+
408
991
  # QQ Browser
409
- - regex: 'M?QQBrowser(?:/(?:Mini)?([\.\d]+))?'
992
+ - regex: 'M?QQBrowser(?:/([\.\d]+))?'
410
993
  name: 'QQ Browser'
411
994
  version: '$1'
995
+ engine:
996
+ default: '' # multi engine -- WebKit or Blink
412
997
 
413
998
  # MIUI Browser
414
- - regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?'
999
+ - regex: '(?:MIUIBrowser|MiuiBrowser)(?:/(\d+[\.\d]+))?'
415
1000
  name: 'MIUI Browser'
416
1001
  version: '$1'
1002
+ engine:
1003
+ default: '' # multi engine -- WebKit or Blink
417
1004
 
418
1005
  # Coc Coc
419
1006
  # This browser (http://coccoc.vn/) is built on top of Chromium with
@@ -428,11 +1015,217 @@
428
1015
  versions:
429
1016
  28: 'Blink'
430
1017
 
1018
+ - regex: 'DuckDuckGo/(\d+[\.\d]*)'
1019
+ name: 'DuckDuckGo Privacy Browser'
1020
+ version: '$1'
1021
+ engine:
1022
+ default: 'Blink'
1023
+
431
1024
  #Samsung Browser
432
1025
  - regex: 'Samsung ?Browser(?:[/ ](\d+[\.\d]+))?'
433
1026
  name: 'Samsung Browser'
434
1027
  version: '$1'
435
1028
 
1029
+ # Super Fast Browser (https://play.google.com/store/apps/details?id=com.browser.tssomas)
1030
+ - regex: '(?:SFBrowser|com.browser.tssomas)(?:/(\d+[\.\d]+))?'
1031
+ name: 'Super Fast Browser'
1032
+ version: '$1'
1033
+
1034
+ # EUI Browser
1035
+ - regex: 'EUI Browser(?:/(\d+[\.\d]+))?'
1036
+ name: 'EUI Browser'
1037
+ version: '$1'
1038
+
1039
+ # UBrowser (https://callumprentice.github.io/)
1040
+ - regex: 'UBrowser(?:/(\d+[\.\d]+))?'
1041
+ name: 'UBrowser'
1042
+ version: '$1'
1043
+
1044
+ #Streamy (Chromium based)
1045
+ - regex: 'Streamy(?:/(\d+[\.\d]+))?'
1046
+ name: 'Streamy'
1047
+ version: '$1'
1048
+ engine:
1049
+ default: 'WebKit'
1050
+
1051
+ #Isivioo (Android version is Chrome based)
1052
+ - regex: 'isivioo'
1053
+ name: 'Isivioo'
1054
+ version: ''
1055
+ engine:
1056
+ default: 'WebKit'
1057
+
1058
+ #UC Browser
1059
+ - regex: 'UC[ ]?Browser(?:[ /]?(\d+[\.\d]+))?'
1060
+ name: 'UC Browser'
1061
+ version: '$1'
1062
+ - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
1063
+ name: 'UC Browser'
1064
+ version: '$1'
1065
+ - regex: 'UC AppleWebKit'
1066
+ name: 'UC Browser'
1067
+ version: ''
1068
+
1069
+ #Tenta Browser
1070
+ #It should be checked before Chrome since the UA contains the Chrome
1071
+ - regex: 'Tenta/(\d+[\.\d]+)'
1072
+ name: 'Tenta Browser'
1073
+ version: '$1'
1074
+ engine:
1075
+ default: 'Webkit'
1076
+
1077
+ # Firefox Rocket
1078
+ - regex: 'Rocket/(\d+[\.\d]+)'
1079
+ name: 'Firefox Rocket'
1080
+ version: '$1'
1081
+ engine:
1082
+ default: 'Webkit'
1083
+
1084
+ # Web Explorer
1085
+ - regex: 'Web Explorer/(\d+[\.\d]+).*Chrome'
1086
+ name: 'Web Explorer'
1087
+ version: '$1'
1088
+ engine:
1089
+ default: 'Webkit'
1090
+
1091
+ # Seznam Browser
1092
+ - regex: 'SznProhlizec/(\d+[\.\d]+)'
1093
+ name: 'Seznam Browser'
1094
+ version: '$1'
1095
+ engine:
1096
+ default: 'Blink'
1097
+
1098
+ # SogouMobileBrowser
1099
+ - regex: 'SogouMobileBrowser/(\d+[\.\d]+)'
1100
+ name: 'Sogou Mobile Browser'
1101
+ version: '$1'
1102
+ engine:
1103
+ default: '' # multi engine -- WebKit or Blink
1104
+
1105
+ # Mint Browser
1106
+ - regex: 'Mint Browser/(\d+[\.\d]+)'
1107
+ name: 'Mint Browser'
1108
+ version: '$1'
1109
+ engine:
1110
+ default: '' # multi engine -- WebKit or Blink
1111
+
1112
+ # Ecosia
1113
+ - regex: 'Ecosia (?:android|ios)@(\d+[\.\d]+)'
1114
+ name: 'Ecosia'
1115
+ version: '$1'
1116
+ engine:
1117
+ default: '' # multi engine -- WebKit or Blink
1118
+
1119
+ # CM Browser
1120
+ - regex: 'ACHEETAHI'
1121
+ name: 'CM Browser'
1122
+ version: ''
1123
+ engine:
1124
+ default: '' # multi engine -- WebKit or Blink
1125
+
1126
+ # Kiwi Browser
1127
+ - regex: 'Kiwi Chrome'
1128
+ name: 'Kiwi'
1129
+ version: ''
1130
+ engine:
1131
+ default: '' # multi engine -- WebKit or Blink
1132
+
1133
+ # 2345 Browser
1134
+ - regex: 'Mb2345Browser/(\d+[\.\d]+)'
1135
+ name: '2345 Browser'
1136
+ version: '$1'
1137
+ engine:
1138
+ default: '' # multi engine -- WebKit or Blink
1139
+
1140
+ # QtWebEngine
1141
+ - regex: 'QtWebEngine/(\d+[\.\d]+)'
1142
+ name: 'QtWebEngine'
1143
+ version: '$1'
1144
+ engine:
1145
+ default: '' # multi engine -- WebKit or Blink
1146
+
1147
+ #Mobile Silk
1148
+ - regex: 'Silk/(\d+[\.\d]+) like Chrome'
1149
+ name: 'Mobile Silk'
1150
+ version: '$1'
1151
+ engine:
1152
+ default: 'Blink'
1153
+ - regex: 'Silk(?:/(\d+[\.\d]+))?'
1154
+ name: 'Mobile Silk'
1155
+ version: '$1'
1156
+ engine:
1157
+ default: 'WebKit'
1158
+
1159
+ #IBrowse
1160
+ - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
1161
+ name: 'IBrowse'
1162
+ version: '$1'
1163
+
1164
+ #Openwave Mobile Browser
1165
+ - regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
1166
+ name: 'Openwave Mobile Browser'
1167
+ version: '$1'
1168
+ - regex: 'Openwave(?:/(\d+[\.\d]+))?'
1169
+ name: 'Openwave Mobile Browser'
1170
+ version: '$1'
1171
+
1172
+ #ONE Browser
1173
+ - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
1174
+ name: 'ONE Browser'
1175
+ version: '$1'
1176
+ engine:
1177
+ default: 'WebKit'
1178
+
1179
+ #Nokia Browser
1180
+ - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
1181
+ name: 'Nokia Browser'
1182
+ version: '$1'
1183
+ - regex: 'Series60/5\.0'
1184
+ name: 'Nokia Browser'
1185
+ version: '7.0'
1186
+ - regex: 'Series60/(\d+[\.\d]+)'
1187
+ name: 'Nokia OSS Browser'
1188
+ version: '$1'
1189
+ - regex: 'S40OviBrowser/(\d+[\.\d]+)'
1190
+ name: 'Nokia Ovi Browser'
1191
+ version: '$1'
1192
+ - regex: '^Nokia|Nokia[EN]?\d+'
1193
+ name: 'Nokia Browser'
1194
+ version: ''
1195
+
1196
+ #Sleipnir
1197
+ - regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
1198
+ name: 'Sleipnir'
1199
+ version: '$1'
1200
+ engine:
1201
+ default: '' # multi engine
1202
+
1203
+ # NTENT Browser
1204
+ - regex: 'NTENTBrowser(?:/(\d+[\.\d]+))?'
1205
+ name: 'NTENT Browser'
1206
+ version: '$1'
1207
+
1208
+ # TV Bro
1209
+ - regex: 'TV Bro/(\d+[\.\d]+)'
1210
+ name: 'TV Bro'
1211
+ version: '$1'
1212
+
1213
+ # Quark
1214
+ - regex: 'Chrome/.+ Quark(?:/(\d+[\.\d]+))?'
1215
+ name: 'Quark'
1216
+ version: '$1'
1217
+ engine:
1218
+ default: 'WebKit'
1219
+
1220
+ # Chrome Webview
1221
+ - regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
1222
+ name: 'Chrome Webview'
1223
+ version: '$1'
1224
+ engine:
1225
+ default: 'WebKit'
1226
+ versions:
1227
+ 28: 'Blink'
1228
+
436
1229
  #Chrome
437
1230
  - regex: 'CrMo(?:/(\d+[\.\d]+))?'
438
1231
  name: 'Chrome Mobile'
@@ -465,7 +1258,12 @@
465
1258
  default: 'WebKit'
466
1259
  versions:
467
1260
  28: 'Blink'
468
- - regex: 'Chrome(?:/(\d+[\.\d]+))?'
1261
+ - regex: 'HeadlessChrome(?:/(\d+[\.\d]+))?'
1262
+ name: 'Headless Chrome'
1263
+ version: '$1'
1264
+ engine:
1265
+ default: 'Blink'
1266
+ - regex: 'Chrome(?!book)(?:/(\d+[\.\d]+))?'
469
1267
  name: 'Chrome'
470
1268
  version: '$1'
471
1269
  engine:
@@ -473,14 +1271,6 @@
473
1271
  versions:
474
1272
  28: 'Blink'
475
1273
 
476
- #UC Browser
477
- - regex: 'UC[ ]?Browser(?:[ /]?(\d+[\.\d]+))?'
478
- name: 'UC Browser'
479
- version: '$1'
480
- - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
481
- name: 'UC Browser'
482
- version: '$1'
483
-
484
1274
  #Tizen Browser
485
1275
  - regex: '(?:Tizen|SLP) Browser(?:/(\d+[\.\d]+))?'
486
1276
  name: 'Tizen Browser'
@@ -560,6 +1350,13 @@
560
1350
  engine:
561
1351
  default: 'Gecko'
562
1352
 
1353
+ #B-Line
1354
+ - regex: 'bline(?:/(\d+[\.\d]+))?'
1355
+ name: 'B-Line'
1356
+ version: '$1'
1357
+ engine:
1358
+ default: 'WebKit'
1359
+
563
1360
  #BrowseX
564
1361
  - regex: 'BrowseX \((\d+[\.\d]+)'
565
1362
  name: 'BrowseX'
@@ -575,6 +1372,13 @@
575
1372
  name: 'Cheshire'
576
1373
  version: '$1'
577
1374
 
1375
+ #dbrowser
1376
+ - regex: 'dbrowser'
1377
+ name: 'dbrowser'
1378
+ version: ''
1379
+ engine:
1380
+ default: 'WebKit'
1381
+
578
1382
  #Dillo
579
1383
  - regex: 'Dillo(?:/(\d+[\.\d]+))?'
580
1384
  name: 'Dillo'
@@ -601,6 +1405,11 @@
601
1405
  name: 'Element Browser'
602
1406
  version: '$1'
603
1407
 
1408
+ # eZ Browser (https://play.google.com/store/apps/details?id=com.asc.csbrowser)
1409
+ - regex: 'eZBrowser(?:/(\d+[\.\d]+))?'
1410
+ name: 'eZ Browser'
1411
+ version: '$1'
1412
+
604
1413
  #Firebird
605
1414
  - regex: 'Firebird(?! Build)(?:/(\d+[\.\d]+))?'
606
1415
  name: 'Firebird'
@@ -634,10 +1443,12 @@
634
1443
  name: 'HotJava'
635
1444
  version: '$1'
636
1445
 
637
- #IBrowse
638
- - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
639
- name: 'IBrowse'
1446
+ #iCabMobile
1447
+ - regex: 'iCabMobile(?:[ /](\d+[\.\d]+))?'
1448
+ name: 'iCab Mobile'
640
1449
  version: '$1'
1450
+ engine:
1451
+ default: 'WebKit'
641
1452
 
642
1453
  #iCab
643
1454
  - regex: 'iCab(?:[ /](\d+[\.\d]+))?'
@@ -648,15 +1459,8 @@
648
1459
  versions:
649
1460
  4: 'WebKit'
650
1461
 
651
- #Sleipnir
652
- - regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
653
- name: 'Sleipnir'
654
- version: '$1'
655
- engine:
656
- default: '' # multi engine
657
-
658
1462
  #Lunascape
659
- - regex: 'Lunascape(?:[/ ](\d+[\.\d]+))?'
1463
+ - regex: 'i?Lunascape(?:[/ ](\d+[\.\d]+))?'
660
1464
  name: 'Lunascape'
661
1465
  version: '$1'
662
1466
  engine:
@@ -688,7 +1492,7 @@
688
1492
  version: 10.0
689
1493
  engine:
690
1494
  default: 'Trident'
691
- - regex: 'Trident/7.0'
1495
+ - regex: 'Trident/[78].0'
692
1496
  name: 'Internet Explorer'
693
1497
  version: 11.0
694
1498
  engine:
@@ -698,19 +1502,12 @@
698
1502
  version: '$1'
699
1503
  engine:
700
1504
  default: 'Trident'
701
- - regex: 'IE[ /](\d+[\.\d]++)'
1505
+ - regex: 'IE[ /](\d+[\.\d]+)'
702
1506
  name: 'Internet Explorer'
703
1507
  version: '$1'
704
1508
  engine:
705
1509
  default: 'Trident'
706
1510
 
707
- #Kazehakase
708
- - regex: 'Kazehakase(?:/(\d+[\.\d]+))?'
709
- name: 'Kazehakase'
710
- version: '$1'
711
- engine:
712
- default: '' # multi engine
713
-
714
1511
  #Kindle Browser
715
1512
  - regex: 'Kindle/(\d+[\.\d]+)'
716
1513
  name: 'Kindle Browser'
@@ -740,14 +1537,6 @@
740
1537
  name: 'LuaKit'
741
1538
  version: '$1'
742
1539
 
743
- #Openwave Mobile Browser
744
- - regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
745
- name: 'Openwave Mobile Browser'
746
- version: '$1'
747
- - regex: 'Openwave(?:/(\d+[\.\d]+))?'
748
- name: 'Openwave Mobile Browser'
749
- version: '$1'
750
-
751
1540
  #OmniWeb
752
1541
  - regex: 'OmniWeb(?:/[v]?(\d+[\.\d]+))?'
753
1542
  name: 'OmniWeb'
@@ -760,13 +1549,6 @@
760
1549
  name: 'Phoenix'
761
1550
  version: '$1'
762
1551
 
763
- #Mobile Silk
764
- - regex: 'Silk(?:/(\d+[\.\d]+))?'
765
- name: 'Mobile Silk'
766
- version: '$1'
767
- engine:
768
- default: 'Blink'
769
-
770
1552
  #NetFront
771
1553
  - regex: 'NetFrontLifeBrowser(?:/(\d+[\.\d]+))?'
772
1554
  name: 'NetFront Life'
@@ -778,7 +1560,7 @@
778
1560
  version: '$1'
779
1561
  engine:
780
1562
  default: 'NetFront'
781
- - regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ NX/\d+\.\d+\.\d+'
1563
+ - regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ N[XF]/\d+\.\d+\.\d+'
782
1564
  name: 'NetFront'
783
1565
  version: ''
784
1566
 
@@ -787,14 +1569,6 @@
787
1569
  name: 'NetPositive'
788
1570
  version: '$1'
789
1571
 
790
- #Obigo
791
- - regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?'
792
- name: 'Obigo'
793
- version: '$1'
794
- - regex: 'Obigo|Teleca'
795
- name: 'Obigo'
796
- version: ''
797
-
798
1572
  #Odyssey Web Browser
799
1573
  - regex: 'Odyssey Web Browser(?:.*OWB/(\d+[\.\d]+))?'
800
1574
  name: 'Odyssey Web Browser'
@@ -805,13 +1579,6 @@
805
1579
  name: 'Off By One'
806
1580
  version: ''
807
1581
 
808
- #ONE Browser
809
- - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
810
- name: 'ONE Browser'
811
- version: '$1'
812
- engine:
813
- default: 'WebKit'
814
-
815
1582
  #Oregano
816
1583
  - regex: 'Oregano(?:[ /](\d+[\.\d]+))?'
817
1584
  name: 'Oregano'
@@ -883,28 +1650,16 @@
883
1650
  name: 'Xiino'
884
1651
  version: '$1'
885
1652
 
886
- #Nokia Browser
887
- - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
888
- name: 'Nokia Browser'
889
- version: '$1'
890
- - regex: 'Series60/5\.0'
891
- name: 'Nokia Browser'
892
- version: '7.0'
893
- - regex: 'Series60/(\d+[\.\d]+)'
894
- name: 'Nokia OSS Browser'
895
- version: '$1'
896
- - regex: 'S40OviBrowser/(\d+[\.\d]+)'
897
- name: 'Nokia Ovi Browser'
898
- version: '$1'
899
- - regex: '^Nokia|Nokia[EN]?\d+'
900
- name: 'Nokia Browser'
901
- version: ''
902
-
903
1653
  #BlackBerry Browser
904
1654
  - regex: 'BlackBerry|PlayBook|BB10'
905
1655
  name: 'BlackBerry Browser'
906
1656
  version: ''
907
1657
 
1658
+ #BriskBard
1659
+ - regex: 'BriskBard(?:/(\d+[\.\d]+))?'
1660
+ name: 'BriskBard'
1661
+ version: '$1'
1662
+
908
1663
  #Android Browser
909
1664
  - regex: 'Android'
910
1665
  name: 'Android Browser'
@@ -912,13 +1667,30 @@
912
1667
  engine:
913
1668
  default: 'WebKit'
914
1669
 
1670
+ #Coast
1671
+ - regex: 'Coast(?:/(\d+[\.\d]+))?'
1672
+ name: 'Coast'
1673
+ version: '$1'
1674
+
1675
+ #Qutebrowser
1676
+ - regex: 'qutebrowser(?:/(\d+[\.\d]+))?'
1677
+ name: 'Qutebrowser'
1678
+ version: '$1'
1679
+
1680
+ # surf (https://surf.suckless.org/)
1681
+ - regex: 'Surf(?:/(\d+[\.\d]+))?'
1682
+ name: 'surf'
1683
+ version: '$1'
1684
+ engine:
1685
+ default: 'WebKit'
1686
+
915
1687
  #Safari
916
1688
  - regex: '(?:(?:iPod|iPad|iPhone).+Version|MobileSafari)/(\d+[\.\d]+)'
917
1689
  name: 'Mobile Safari'
918
1690
  version: '$1'
919
1691
  engine:
920
1692
  default: 'WebKit'
921
- - regex: 'Version/(\d+[\.\d]+).*Mobile.*Safari/'
1693
+ - regex: '(?:Version/(\d+[\.\d]+).*)?Mobile.*Safari/'
922
1694
  name: 'Mobile Safari'
923
1695
  version: '$1'
924
1696
  engine:
@@ -933,3 +1705,32 @@
933
1705
  version: '$1'
934
1706
  engine:
935
1707
  default: 'WebKit'
1708
+
1709
+ #Dorado
1710
+ - regex: 'Dorado WAP-Browser[/ ](\d+[\.\d]+)'
1711
+ name: 'Dorado'
1712
+ version: '$1'
1713
+
1714
+ #NetSurf
1715
+ - regex: 'NetSurf(?:/(\d+[\.\d]+))?'
1716
+ name: 'NetSurf'
1717
+ version: '$1'
1718
+ engine:
1719
+ default: 'NetSurf'
1720
+
1721
+ # Uzbl (https://www.uzbl.org/)
1722
+ - regex: 'Uzbl'
1723
+ name: 'Uzbl'
1724
+ version: ''
1725
+
1726
+ # SimpleBrowser (https://github.com/SimpleBrowserDotNet/SimpleBrowser)
1727
+ - regex: 'SimpleBrowser'
1728
+ name: 'SimpleBrowser'
1729
+ version: ''
1730
+
1731
+ # Zvu
1732
+ - regex: 'Zvu(?:/(\d+[\.\d]+))?'
1733
+ name: 'Zvu'
1734
+ version: '$1'
1735
+ engine:
1736
+ default: 'Gecko'