device_detector 1.0.0 → 1.0.5

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 (96) 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 +18 -5
  6. data/README.md +7 -9
  7. data/Rakefile +20 -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 +46 -20
  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 +895 -21
  22. data/regexes/client/browser_engine.yml +11 -2
  23. data/regexes/client/browsers.yml +1025 -205
  24. data/regexes/client/feed_readers.yml +38 -2
  25. data/regexes/client/libraries.yml +81 -2
  26. data/regexes/client/mediaplayers.yml +25 -5
  27. data/regexes/client/mobile_apps.yml +213 -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 +12768 -571
  33. data/regexes/device/notebooks.yml +114 -0
  34. data/regexes/device/portable_media_player.yml +4 -6
  35. data/regexes/device/televisions.yml +33 -5
  36. data/regexes/oss.yml +138 -49
  37. data/regexes/vendorfragments.yml +6 -2
  38. data/spec/device_detector/concrete_user_agent_spec.rb +16 -17
  39. data/spec/device_detector/detector_fixtures_spec.rb +59 -24
  40. data/spec/device_detector/device_spec.rb +28 -48
  41. data/spec/device_detector/memory_cache_spec.rb +60 -28
  42. data/spec/device_detector/model_extractor_spec.rb +3 -3
  43. data/spec/device_detector/version_extractor_spec.rb +5 -6
  44. data/spec/device_detector_spec.rb +60 -69
  45. data/spec/fixtures/client/browser.yml +1810 -260
  46. data/spec/fixtures/client/feed_reader.yml +47 -35
  47. data/spec/fixtures/client/library.yml +118 -3
  48. data/spec/fixtures/client/mediaplayer.yml +32 -37
  49. data/spec/fixtures/client/mobile_app.yml +225 -5
  50. data/spec/fixtures/client/pim.yml +37 -18
  51. data/spec/fixtures/detector/bots.yml +1531 -136
  52. data/spec/fixtures/detector/camera.yml +36 -10
  53. data/spec/fixtures/detector/car_browser.yml +64 -3
  54. data/spec/fixtures/detector/console.yml +80 -26
  55. data/spec/fixtures/detector/desktop.yml +3865 -2238
  56. data/spec/fixtures/detector/feature_phone.yml +151 -42
  57. data/spec/fixtures/detector/feed_reader.yml +186 -121
  58. data/spec/fixtures/detector/mediaplayer.yml +113 -39
  59. data/spec/fixtures/detector/mobile_apps.yml +451 -21
  60. data/spec/fixtures/detector/phablet.yml +3847 -660
  61. data/spec/fixtures/detector/portable_media_player.yml +81 -16
  62. data/spec/fixtures/detector/smart_display.yml +8 -5
  63. data/spec/fixtures/detector/smart_speaker.yml +55 -0
  64. data/spec/fixtures/detector/smartphone-1.yml +5385 -4948
  65. data/spec/fixtures/detector/smartphone-10.yml +9973 -0
  66. data/spec/fixtures/detector/smartphone-11.yml +10015 -0
  67. data/spec/fixtures/detector/smartphone-12.yml +9897 -0
  68. data/spec/fixtures/detector/smartphone-13.yml +9912 -0
  69. data/spec/fixtures/detector/smartphone-14.yml +9935 -0
  70. data/spec/fixtures/detector/smartphone-15.yml +6595 -0
  71. data/spec/fixtures/detector/smartphone-16.yml +10021 -0
  72. data/spec/fixtures/detector/smartphone-17.yml +9408 -0
  73. data/spec/fixtures/detector/smartphone-2.yml +5221 -4646
  74. data/spec/fixtures/detector/smartphone-3.yml +5047 -4494
  75. data/spec/fixtures/detector/smartphone-4.yml +6958 -2761
  76. data/spec/fixtures/detector/smartphone-5.yml +9937 -0
  77. data/spec/fixtures/detector/smartphone-6.yml +10114 -0
  78. data/spec/fixtures/detector/smartphone-7.yml +9975 -0
  79. data/spec/fixtures/detector/smartphone-8.yml +9897 -0
  80. data/spec/fixtures/detector/smartphone-9.yml +9880 -0
  81. data/spec/fixtures/detector/smartphone.yml +5229 -4649
  82. data/spec/fixtures/detector/tablet-1.yml +4640 -4140
  83. data/spec/fixtures/detector/tablet-2.yml +9806 -71
  84. data/spec/fixtures/detector/tablet-3.yml +9968 -0
  85. data/spec/fixtures/detector/tablet-4.yml +7113 -0
  86. data/spec/fixtures/detector/tablet.yml +4619 -4132
  87. data/spec/fixtures/detector/tv.yml +4093 -1342
  88. data/spec/fixtures/detector/unknown.yml +1042 -1006
  89. data/spec/fixtures/detector/wearable.yml +61 -0
  90. data/spec/fixtures/device/camera.yml +4 -3
  91. data/spec/fixtures/device/car_browser.yml +9 -2
  92. data/spec/fixtures/device/console.yml +15 -14
  93. data/spec/fixtures/device/notebook.yml +7 -0
  94. data/spec/fixtures/parser/oss.yml +291 -2
  95. data/spec/fixtures/parser/vendorfragments.yml +8 -2
  96. metadata +59 -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: 'Chrome/.+ 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: '(?!.*Opera[ /])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]+)'
242
780
  name: 'Opera Mini'
243
781
  version: '$1'
244
782
  engine:
245
783
  default: 'Presto'
784
+ - regex: 'Opera ?Mini.+Version/(\d+[\.\d]+)'
785
+ name: 'Opera Mini'
786
+ version: '$1'
787
+ engine:
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,182 +805,440 @@
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
- default: ''
265
- versions:
266
- 3.5: 'Elektra'
267
- 7: 'Presto'
268
- 15: 'Blink'
812
+ default: ''
813
+ versions:
814
+ '3.5': 'Elektra'
815
+ 7: 'Presto'
816
+ 15: 'Blink'
817
+
818
+ #Rekonq
819
+ - regex: 'rekonq(?:/(\d+[\.\d]+))?'
820
+ name: 'Rekonq'
821
+ version: '$1'
822
+ engine:
823
+ default: 'WebKit'
824
+
825
+ #CoolNovo (former ChromePlus)
826
+ - regex: 'CoolNovo(?:/(\d+[\.\d]+))?'
827
+ name: 'CoolNovo'
828
+ version: '$1'
829
+ engine:
830
+ default: '' # multi engine
831
+
832
+ #Comodo Dragon
833
+ - regex: '(?:Comodo[ _])?Dragon(?!fruit)(?:/(\d+[\.\d]+))?'
834
+ name: 'Comodo Dragon'
835
+ version: '$1'
836
+ engine:
837
+ default: 'WebKit'
838
+ versions:
839
+ 28: 'Blink'
840
+
841
+ #ChromePlus
842
+ - regex: 'ChromePlus(?:/(\d+[\.\d]+))?'
843
+ name: 'ChromePlus'
844
+ version: '$1'
845
+ engine:
846
+ default: '' # multi engine
847
+
848
+ #Conkeror
849
+ - regex: 'Conkeror(?:/(\d+[\.\d]+))?'
850
+ name: 'Conkeror'
851
+ version: '$1'
852
+ engine:
853
+ default: 'Gecko'
854
+
855
+ #Konqueror
856
+ - regex: 'Konqueror(?:/(\d+[\.\d]+))?'
857
+ name: 'Konqueror'
858
+ version: '$1'
859
+ engine:
860
+ default: 'KHTML'
861
+ versions:
862
+ 4: '' # multiple (KHTML or WebKit)
863
+
864
+ #Baidu Browser
865
+ - regex: '(?:baidubrowser|bdbrowser_i18n|bdbrowser)(?:[/ ](\d+[\.\d]*))?'
866
+ name: 'Baidu Browser'
867
+ version: '$1'
868
+ - regex: 'FlyFlow(?:[/ ](\d+[\.\d]*))?'
869
+ name: 'Baidu Browser'
870
+ version: '$1'
871
+
872
+ #Baidu Spark
873
+ - regex: '(?:(?:BD)?Spark|BIDUBrowser)[/ ](\d+[\.\d]*)'
874
+ name: 'Baidu Spark'
875
+ version: '$1'
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
+
884
+ #Yandex Browser
885
+ - regex: 'YaBrowser(?:/(\d+[\.\d]*))(?: \((alpha|beta)\))?'
886
+ name: 'Yandex Browser'
887
+ version: '$1 $2'
888
+ engine:
889
+ default: 'Blink'
890
+
891
+ # Yaani Browser
892
+ - regex: 'YaaniBrowser(?:/(\d+[\.\d]+))?'
893
+ name: 'Yaani Browser'
894
+ version: '$1'
895
+ engine:
896
+ default: 'Blink'
897
+
898
+ #Vivaldi
899
+ - regex: 'Vivaldi(?:/(\d+[\.\d]+))?'
900
+ name: 'Vivaldi'
901
+ version: '$1'
902
+ engine:
903
+ default: 'Blink'
904
+
905
+ #TweakStyle
906
+ - regex: 'TweakStyle(?:/(\d+[\.\d]+))?'
907
+ name: 'TweakStyle'
908
+ version: '$1'
909
+ engine:
910
+ default: 'Blink'
911
+
912
+ #Midori
913
+ - regex: 'Midori(?:/(\d+[\.\d]+))?'
914
+ name: 'Midori'
915
+ version: '$1'
916
+ engine:
917
+ default: 'WebKit'
918
+
919
+ #Mercury
920
+ - regex: 'Mercury(?:/(\d+[\.\d]+))?'
921
+ name: 'Mercury'
922
+ version: '$1'
923
+
924
+ #Maxthon
925
+ - regex: '(?:Maxthon|MxBrowser)[ /](\d+[\.\d]+)'
926
+ name: 'Maxthon'
927
+ version: '$1'
928
+ engine:
929
+ default: '' # Trident and WebKit
930
+ versions:
931
+ 3: 'WebKit'
932
+
933
+ - regex: '(?:Maxthon|MyIE2)'
934
+ name: 'Maxthon'
935
+ version: ''
936
+ engine:
937
+ default: '' # Trident and WebKit
938
+
939
+ #Puffin
940
+ - regex: 'Puffin(?:/(\d+[\.\d]+))?'
941
+ name: 'Puffin'
942
+ version: '$1'
943
+
944
+ #MobileIron
945
+ - regex: 'MobileIron(?:/(\d+[\.\d]+))?'
946
+ name: 'Iron Mobile'
947
+ version: '$1'
948
+ engine:
949
+ default: 'Blink'
950
+
951
+ # Iron
952
+ - regex: 'Chrome(?:/(\d+[\.\d]+))?.*Iron'
953
+ name: 'Iron'
954
+ version: '$1'
955
+ engine:
956
+ default: 'WebKit'
957
+
958
+ - regex: 'Iron(?:/(\d+[\.\d]+))?'
959
+ name: 'Iron'
960
+ version: '$1'
961
+ engine:
962
+ default: 'WebKit'
963
+ versions:
964
+ 28: 'Blink'
965
+
966
+ #GNOME Web
967
+ - regex: 'Epiphany(?:/(\d+[\.\d]+))?'
968
+ name: 'GNOME Web'
969
+ version: '$1'
970
+ engine:
971
+ default: 'Gecko'
972
+ versions:
973
+ '2.9.16': '' # multi engine
974
+ '2.28': 'WebKit'
975
+
976
+ # LieBaoFast
977
+ - regex: 'LieBaoFast(?:[ /](\d+[\.\d]+))?'
978
+ name: 'LieBaoFast'
979
+ version: '$1'
980
+
981
+ # Cheetah Browser
982
+ - regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?'
983
+ name: 'Cheetah Browser'
984
+ version: '$1'
985
+
986
+ # Sogou Explorer
987
+ - regex: 'SE (\d+[\.\d]+)'
988
+ name: 'Sogou Explorer'
989
+ version: '$1'
990
+
991
+ # QQ Browser Mini
992
+ - regex: 'M?QQBrowser/Mini([\.\d]+)?'
993
+ name: 'QQ Browser Mini'
994
+ version: '$1'
995
+ engine:
996
+ default: '' # multi engine -- WebKit or Blink
997
+
998
+ # QQ Browser
999
+ - regex: 'M?QQBrowser(?:/([\.\d]+))?'
1000
+ name: 'QQ Browser'
1001
+ version: '$1'
1002
+ engine:
1003
+ default: '' # multi engine -- WebKit or Blink
1004
+
1005
+ # MIUI Browser
1006
+ - regex: '(?:MIUIBrowser|MiuiBrowser)(?:/(\d+[\.\d]+))?'
1007
+ name: 'MIUI Browser'
1008
+ version: '$1'
1009
+ engine:
1010
+ default: '' # multi engine -- WebKit or Blink
1011
+
1012
+ # Coc Coc
1013
+ # This browser (http://coccoc.vn/) is built on top of Chromium with
1014
+ # additional features for Vietnamese users. Its regex has to be placed
1015
+ # before generic Chrome regex, or Chrome regex will match first and
1016
+ # the browser is mistaken as "Chrome".
1017
+ - regex: 'coc_coc_browser(?:/(\d+[\.\d]+))?'
1018
+ name: 'Coc Coc'
1019
+ version: '$1'
1020
+ engine:
1021
+ default: 'WebKit'
1022
+ versions:
1023
+ 28: 'Blink'
1024
+
1025
+ - regex: 'DuckDuckGo/(\d+[\.\d]*)'
1026
+ name: 'DuckDuckGo Privacy Browser'
1027
+ version: '$1'
1028
+ engine:
1029
+ default: 'Blink'
1030
+
1031
+ #Samsung Browser
1032
+ - regex: 'Samsung ?Browser(?:[/ ](\d+[\.\d]+))?'
1033
+ name: 'Samsung Browser'
1034
+ version: '$1'
1035
+
1036
+ # Super Fast Browser (https://play.google.com/store/apps/details?id=com.browser.tssomas)
1037
+ - regex: '(?:SFBrowser|com.browser.tssomas)(?:/(\d+[\.\d]+))?'
1038
+ name: 'Super Fast Browser'
1039
+ version: '$1'
1040
+
1041
+ # EUI Browser
1042
+ - regex: 'EUI Browser(?:/(\d+[\.\d]+))?'
1043
+ name: 'EUI Browser'
1044
+ version: '$1'
1045
+
1046
+ # UBrowser (https://callumprentice.github.io/)
1047
+ - regex: 'UBrowser(?:/(\d+[\.\d]+))?'
1048
+ name: 'UBrowser'
1049
+ version: '$1'
1050
+
1051
+ #Streamy (Chromium based)
1052
+ - regex: 'Streamy(?:/(\d+[\.\d]+))?'
1053
+ name: 'Streamy'
1054
+ version: '$1'
1055
+ engine:
1056
+ default: 'WebKit'
1057
+
1058
+ #Isivioo (Android version is Chrome based)
1059
+ - regex: 'isivioo'
1060
+ name: 'Isivioo'
1061
+ version: ''
1062
+ engine:
1063
+ default: 'WebKit'
1064
+
1065
+ #UC Browser
1066
+ - regex: 'UC[ ]?Browser(?:[ /]?(\d+[\.\d]+))?'
1067
+ name: 'UC Browser'
1068
+ version: '$1'
1069
+ - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
1070
+ name: 'UC Browser'
1071
+ version: '$1'
1072
+ - regex: 'UC AppleWebKit'
1073
+ name: 'UC Browser'
1074
+ version: ''
1075
+
1076
+ #Tenta Browser
1077
+ #It should be checked before Chrome since the UA contains the Chrome
1078
+ - regex: 'Tenta/(\d+[\.\d]+)'
1079
+ name: 'Tenta Browser'
1080
+ version: '$1'
1081
+ engine:
1082
+ default: 'Webkit'
269
1083
 
270
- #Rekonq
271
- - regex: 'rekonq(?:/(\d+[\.\d]+))?'
272
- name: 'Rekonq'
1084
+ # Firefox Rocket
1085
+ - regex: 'Rocket/(\d+[\.\d]+)'
1086
+ name: 'Firefox Rocket'
273
1087
  version: '$1'
274
1088
  engine:
275
- default: 'WebKit'
1089
+ default: 'Webkit'
276
1090
 
277
- #CoolNovo (former ChromePlus)
278
- - regex: 'CoolNovo(?:/(\d+[\.\d]+))?'
279
- name: 'CoolNovo'
1091
+ # Web Explorer
1092
+ - regex: 'Web Explorer/(\d+[\.\d]+).*Chrome'
1093
+ name: 'Web Explorer'
280
1094
  version: '$1'
281
1095
  engine:
282
- default: '' # multi engine
1096
+ default: 'Webkit'
283
1097
 
284
- #Comodo Dragon
285
- - regex: 'Comodo[ _]Dragon(?:/(\d+[\.\d]+))?'
286
- name: 'Comodo Dragon'
1098
+ # Seznam Browser
1099
+ - regex: 'SznProhlizec/(\d+[\.\d]+)'
1100
+ name: 'Seznam Browser'
287
1101
  version: '$1'
288
1102
  engine:
289
- default: 'WebKit'
290
- versions:
291
- 28: 'Blink'
1103
+ default: 'Blink'
292
1104
 
293
- #ChromePlus
294
- - regex: 'ChromePlus(?:/(\d+[\.\d]+))?'
295
- name: 'ChromePlus'
1105
+ # SogouMobileBrowser
1106
+ - regex: 'SogouMobileBrowser/(\d+[\.\d]+)'
1107
+ name: 'Sogou Mobile Browser'
296
1108
  version: '$1'
297
1109
  engine:
298
- default: '' # multi engine
1110
+ default: '' # multi engine -- WebKit or Blink
299
1111
 
300
- #Conkeror
301
- - regex: 'Conkeror(?:/(\d+[\.\d]+))?'
302
- name: 'Conkeror'
1112
+ # Mint Browser
1113
+ - regex: 'Mint Browser/(\d+[\.\d]+)'
1114
+ name: 'Mint Browser'
303
1115
  version: '$1'
304
1116
  engine:
305
- default: 'Gecko'
1117
+ default: '' # multi engine -- WebKit or Blink
306
1118
 
307
- #Konqueror
308
- - regex: 'Konqueror(?:/(\d+[\.\d]+))?'
309
- name: 'Konqueror'
1119
+ # Ecosia
1120
+ - regex: 'Ecosia (?:android|ios)@(\d+[\.\d]+)'
1121
+ name: 'Ecosia'
310
1122
  version: '$1'
311
1123
  engine:
312
- default: 'KHTML'
313
- versions:
314
- 4: '' # multiple (KHTML or WebKit)
1124
+ default: '' # multi engine -- WebKit or Blink
315
1125
 
316
- #Baidu Browser
317
- - regex: 'baidubrowser(?:[/ ](\d+[\.\d]*))?'
318
- name: 'Baidu Browser'
319
- version: '$1'
1126
+ # CM Browser
1127
+ - regex: 'ACHEETAHI'
1128
+ name: 'CM Browser'
1129
+ version: ''
1130
+ engine:
1131
+ default: '' # multi engine -- WebKit or Blink
320
1132
 
321
- #Baidu Spark
322
- - regex: '(?:(?:BD)?Spark|BIDUBrowser)[/ ](\d+[\.\d]*)'
323
- name: 'Baidu Spark'
324
- version: '$1'
1133
+ # Kiwi Browser
1134
+ - regex: 'Kiwi Chrome'
1135
+ name: 'Kiwi'
1136
+ version: ''
1137
+ engine:
1138
+ default: '' # multi engine -- WebKit or Blink
325
1139
 
326
- #Yandex Browser
327
- - regex: 'YaBrowser(?:/(\d+[\.\d]*))?'
328
- name: 'Yandex Browser'
1140
+ # 2345 Browser
1141
+ - regex: 'Mb2345Browser/(\d+[\.\d]+)'
1142
+ name: '2345 Browser'
329
1143
  version: '$1'
330
1144
  engine:
331
- default: 'Blink'
1145
+ default: '' # multi engine -- WebKit or Blink
332
1146
 
333
- #Vivaldi
334
- - regex: 'Vivaldi(?:/(\d+[\.\d]+))?'
335
- name: 'Vivaldi'
1147
+ # QtWebEngine
1148
+ - regex: 'QtWebEngine/(\d+[\.\d]+)'
1149
+ name: 'QtWebEngine'
336
1150
  version: '$1'
337
1151
  engine:
338
- default: 'Blink'
1152
+ default: '' # multi engine -- WebKit or Blink
339
1153
 
340
- #TweakStyle
341
- - regex: 'TweakStyle(?:/(\d+[\.\d]+))?'
342
- name: 'TweakStyle'
1154
+ #Mobile Silk
1155
+ - regex: 'Silk/(\d+[\.\d]+) like Chrome'
1156
+ name: 'Mobile Silk'
343
1157
  version: '$1'
344
1158
  engine:
345
1159
  default: 'Blink'
346
-
347
- #Midori
348
- - regex: 'Midori(?:/(\d+[\.\d]+))?'
349
- name: 'Midori'
1160
+ - regex: 'Silk(?:/(\d+[\.\d]+))?'
1161
+ name: 'Mobile Silk'
350
1162
  version: '$1'
351
1163
  engine:
352
1164
  default: 'WebKit'
353
1165
 
354
- #Mercury
355
- - regex: 'Mercury(?:/(\d+[\.\d]+))?'
356
- name: 'Mercury'
1166
+ #IBrowse
1167
+ - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
1168
+ name: 'IBrowse'
357
1169
  version: '$1'
358
1170
 
359
- #Maxthon
360
- - regex: '(?:Maxthon|MxBrowser)[ /](\d+[\.\d]+)'
361
- name: 'Maxthon'
1171
+ #Openwave Mobile Browser
1172
+ - regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
1173
+ name: 'Openwave Mobile Browser'
362
1174
  version: '$1'
363
- engine:
364
- default: '' # Trident and WebKit
365
- versions:
366
- 3: 'WebKit'
367
-
368
- - regex: '(?:Maxthon|MyIE2|Uzbl)'
369
- name: 'Maxthon'
370
- version: ''
371
- engine:
372
- default: '' # Trident and WebKit
373
-
374
- #Puffin
375
- - regex: 'Puffin(?:/(\d+[\.\d]+))?'
376
- name: 'Puffin'
1175
+ - regex: 'Openwave(?:/(\d+[\.\d]+))?'
1176
+ name: 'Openwave Mobile Browser'
377
1177
  version: '$1'
378
1178
 
379
- #Iron
380
- - regex: 'Iron(?:/(\d+[\.\d]+))?'
381
- name: 'Iron'
1179
+ #ONE Browser
1180
+ - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
1181
+ name: 'ONE Browser'
382
1182
  version: '$1'
383
1183
  engine:
384
1184
  default: 'WebKit'
385
- versions:
386
- 28: 'Blink'
387
1185
 
388
- #Epiphany
389
- - regex: 'Epiphany(?:/(\d+[\.\d]+))?'
390
- name: 'Epiphany'
1186
+ #Nokia Browser
1187
+ - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
1188
+ name: 'Nokia Browser'
1189
+ version: '$1'
1190
+ - regex: 'Series60/5\.0'
1191
+ name: 'Nokia Browser'
1192
+ version: '7.0'
1193
+ - regex: 'Series60/(\d+[\.\d]+)'
1194
+ name: 'Nokia OSS Browser'
1195
+ version: '$1'
1196
+ - regex: 'S40OviBrowser/(\d+[\.\d]+)'
1197
+ name: 'Nokia Ovi Browser'
1198
+ version: '$1'
1199
+ - regex: '^Nokia|Nokia[EN]?\d+'
1200
+ name: 'Nokia Browser'
1201
+ version: ''
1202
+
1203
+ #Sleipnir
1204
+ - regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
1205
+ name: 'Sleipnir'
391
1206
  version: '$1'
392
1207
  engine:
393
- default: 'Gecko'
394
- versions:
395
- 2.9.16: '' # multi engine
396
- 2.28: 'WebKit'
1208
+ default: '' # multi engine
397
1209
 
398
- # Liebao
399
- - regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?'
400
- name: 'Liebao'
1210
+ # NTENT Browser
1211
+ - regex: 'NTENTBrowser(?:/(\d+[\.\d]+))?'
1212
+ name: 'NTENT Browser'
401
1213
  version: '$1'
402
1214
 
403
- # Sogou Explorer
404
- - regex: 'SE (\d+[\.\d]+)'
405
- name: 'Sogou Explorer'
1215
+ # TV Bro
1216
+ - regex: 'TV Bro/(\d+[\.\d]+)'
1217
+ name: 'TV Bro'
406
1218
  version: '$1'
407
1219
 
408
- # QQ Browser
409
- - regex: 'M?QQBrowser(?:/(?:Mini)?([\.\d]+))?'
410
- name: 'QQ Browser'
1220
+ # Quark
1221
+ - regex: 'Chrome/.+ Quark(?:/(\d+[\.\d]+))?'
1222
+ name: 'Quark'
411
1223
  version: '$1'
1224
+ engine:
1225
+ default: 'WebKit'
412
1226
 
413
- # MIUI Browser
414
- - regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?'
415
- name: 'MIUI Browser'
1227
+ - regex: 'BlueBrowser(?:/(\d+[\.\d]+))?'
1228
+ name: 'Blue Browser'
416
1229
  version: '$1'
1230
+ engine:
1231
+ default: 'WebKit'
417
1232
 
418
- # Coc Coc
419
- # This browser (http://coccoc.vn/) is built on top of Chromium with
420
- # additional features for Vietnamese users. Its regex has to be placed
421
- # before generic Chrome regex, or Chrome regex will match first and
422
- # the browser is mistaken as "Chrome".
423
- - regex: 'coc_coc_browser(?:/(\d+[\.\d]+))?'
424
- name: 'Coc Coc'
1233
+ # Chrome Webview
1234
+ - regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
1235
+ name: 'Chrome Webview'
425
1236
  version: '$1'
426
1237
  engine:
427
1238
  default: 'WebKit'
428
1239
  versions:
429
1240
  28: 'Blink'
430
1241
 
431
- #Samsung Browser
432
- - regex: 'Samsung ?Browser(?:[/ ](\d+[\.\d]+))?'
433
- name: 'Samsung Browser'
434
- version: '$1'
435
-
436
1242
  #Chrome
437
1243
  - regex: 'CrMo(?:/(\d+[\.\d]+))?'
438
1244
  name: 'Chrome Mobile'
@@ -465,7 +1271,12 @@
465
1271
  default: 'WebKit'
466
1272
  versions:
467
1273
  28: 'Blink'
468
- - regex: 'Chrome(?:/(\d+[\.\d]+))?'
1274
+ - regex: 'HeadlessChrome(?:/(\d+[\.\d]+))?'
1275
+ name: 'Headless Chrome'
1276
+ version: '$1'
1277
+ engine:
1278
+ default: 'Blink'
1279
+ - regex: 'Chrome(?!book)(?:/(\d+[\.\d]+))?'
469
1280
  name: 'Chrome'
470
1281
  version: '$1'
471
1282
  engine:
@@ -473,14 +1284,6 @@
473
1284
  versions:
474
1285
  28: 'Blink'
475
1286
 
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
1287
  #Tizen Browser
485
1288
  - regex: '(?:Tizen|SLP) Browser(?:/(\d+[\.\d]+))?'
486
1289
  name: 'Tizen Browser'
@@ -560,6 +1363,13 @@
560
1363
  engine:
561
1364
  default: 'Gecko'
562
1365
 
1366
+ #B-Line
1367
+ - regex: 'bline(?:/(\d+[\.\d]+))?'
1368
+ name: 'B-Line'
1369
+ version: '$1'
1370
+ engine:
1371
+ default: 'WebKit'
1372
+
563
1373
  #BrowseX
564
1374
  - regex: 'BrowseX \((\d+[\.\d]+)'
565
1375
  name: 'BrowseX'
@@ -575,6 +1385,13 @@
575
1385
  name: 'Cheshire'
576
1386
  version: '$1'
577
1387
 
1388
+ #dbrowser
1389
+ - regex: 'dbrowser'
1390
+ name: 'dbrowser'
1391
+ version: ''
1392
+ engine:
1393
+ default: 'WebKit'
1394
+
578
1395
  #Dillo
579
1396
  - regex: 'Dillo(?:/(\d+[\.\d]+))?'
580
1397
  name: 'Dillo'
@@ -601,6 +1418,11 @@
601
1418
  name: 'Element Browser'
602
1419
  version: '$1'
603
1420
 
1421
+ # eZ Browser (https://play.google.com/store/apps/details?id=com.asc.csbrowser)
1422
+ - regex: 'eZBrowser(?:/(\d+[\.\d]+))?'
1423
+ name: 'eZ Browser'
1424
+ version: '$1'
1425
+
604
1426
  #Firebird
605
1427
  - regex: 'Firebird(?! Build)(?:/(\d+[\.\d]+))?'
606
1428
  name: 'Firebird'
@@ -634,10 +1456,12 @@
634
1456
  name: 'HotJava'
635
1457
  version: '$1'
636
1458
 
637
- #IBrowse
638
- - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
639
- name: 'IBrowse'
1459
+ #iCabMobile
1460
+ - regex: 'iCabMobile(?:[ /](\d+[\.\d]+))?'
1461
+ name: 'iCab Mobile'
640
1462
  version: '$1'
1463
+ engine:
1464
+ default: 'WebKit'
641
1465
 
642
1466
  #iCab
643
1467
  - regex: 'iCab(?:[ /](\d+[\.\d]+))?'
@@ -648,15 +1472,8 @@
648
1472
  versions:
649
1473
  4: 'WebKit'
650
1474
 
651
- #Sleipnir
652
- - regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
653
- name: 'Sleipnir'
654
- version: '$1'
655
- engine:
656
- default: '' # multi engine
657
-
658
1475
  #Lunascape
659
- - regex: 'Lunascape(?:[/ ](\d+[\.\d]+))?'
1476
+ - regex: 'i?Lunascape(?:[/ ](\d+[\.\d]+))?'
660
1477
  name: 'Lunascape'
661
1478
  version: '$1'
662
1479
  engine:
@@ -688,7 +1505,7 @@
688
1505
  version: 10.0
689
1506
  engine:
690
1507
  default: 'Trident'
691
- - regex: 'Trident/7.0'
1508
+ - regex: 'Trident/[78].0'
692
1509
  name: 'Internet Explorer'
693
1510
  version: 11.0
694
1511
  engine:
@@ -698,19 +1515,12 @@
698
1515
  version: '$1'
699
1516
  engine:
700
1517
  default: 'Trident'
701
- - regex: 'IE[ /](\d+[\.\d]++)'
1518
+ - regex: 'IE[ /](\d+[\.\d]+)'
702
1519
  name: 'Internet Explorer'
703
1520
  version: '$1'
704
1521
  engine:
705
1522
  default: 'Trident'
706
1523
 
707
- #Kazehakase
708
- - regex: 'Kazehakase(?:/(\d+[\.\d]+))?'
709
- name: 'Kazehakase'
710
- version: '$1'
711
- engine:
712
- default: '' # multi engine
713
-
714
1524
  #Kindle Browser
715
1525
  - regex: 'Kindle/(\d+[\.\d]+)'
716
1526
  name: 'Kindle Browser'
@@ -740,14 +1550,6 @@
740
1550
  name: 'LuaKit'
741
1551
  version: '$1'
742
1552
 
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
1553
  #OmniWeb
752
1554
  - regex: 'OmniWeb(?:/[v]?(\d+[\.\d]+))?'
753
1555
  name: 'OmniWeb'
@@ -760,13 +1562,6 @@
760
1562
  name: 'Phoenix'
761
1563
  version: '$1'
762
1564
 
763
- #Mobile Silk
764
- - regex: 'Silk(?:/(\d+[\.\d]+))?'
765
- name: 'Mobile Silk'
766
- version: '$1'
767
- engine:
768
- default: 'Blink'
769
-
770
1565
  #NetFront
771
1566
  - regex: 'NetFrontLifeBrowser(?:/(\d+[\.\d]+))?'
772
1567
  name: 'NetFront Life'
@@ -778,7 +1573,7 @@
778
1573
  version: '$1'
779
1574
  engine:
780
1575
  default: 'NetFront'
781
- - regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ NX/\d+\.\d+\.\d+'
1576
+ - regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ N[XF]/\d+\.\d+\.\d+'
782
1577
  name: 'NetFront'
783
1578
  version: ''
784
1579
 
@@ -787,14 +1582,6 @@
787
1582
  name: 'NetPositive'
788
1583
  version: '$1'
789
1584
 
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
1585
  #Odyssey Web Browser
799
1586
  - regex: 'Odyssey Web Browser(?:.*OWB/(\d+[\.\d]+))?'
800
1587
  name: 'Odyssey Web Browser'
@@ -805,13 +1592,6 @@
805
1592
  name: 'Off By One'
806
1593
  version: ''
807
1594
 
808
- #ONE Browser
809
- - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
810
- name: 'ONE Browser'
811
- version: '$1'
812
- engine:
813
- default: 'WebKit'
814
-
815
1595
  #Oregano
816
1596
  - regex: 'Oregano(?:[ /](\d+[\.\d]+))?'
817
1597
  name: 'Oregano'
@@ -883,28 +1663,16 @@
883
1663
  name: 'Xiino'
884
1664
  version: '$1'
885
1665
 
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
1666
  #BlackBerry Browser
904
1667
  - regex: 'BlackBerry|PlayBook|BB10'
905
1668
  name: 'BlackBerry Browser'
906
1669
  version: ''
907
1670
 
1671
+ #BriskBard
1672
+ - regex: 'BriskBard(?:/(\d+[\.\d]+))?'
1673
+ name: 'BriskBard'
1674
+ version: '$1'
1675
+
908
1676
  #Android Browser
909
1677
  - regex: 'Android'
910
1678
  name: 'Android Browser'
@@ -912,13 +1680,30 @@
912
1680
  engine:
913
1681
  default: 'WebKit'
914
1682
 
1683
+ #Coast
1684
+ - regex: 'Coast(?:/(\d+[\.\d]+))?'
1685
+ name: 'Coast'
1686
+ version: '$1'
1687
+
1688
+ #Qutebrowser
1689
+ - regex: 'qutebrowser(?:/(\d+[\.\d]+))?'
1690
+ name: 'Qutebrowser'
1691
+ version: '$1'
1692
+
1693
+ # surf (https://surf.suckless.org/)
1694
+ - regex: 'Surf(?:/(\d+[\.\d]+))?'
1695
+ name: 'surf'
1696
+ version: '$1'
1697
+ engine:
1698
+ default: 'WebKit'
1699
+
915
1700
  #Safari
916
1701
  - regex: '(?:(?:iPod|iPad|iPhone).+Version|MobileSafari)/(\d+[\.\d]+)'
917
1702
  name: 'Mobile Safari'
918
1703
  version: '$1'
919
1704
  engine:
920
1705
  default: 'WebKit'
921
- - regex: 'Version/(\d+[\.\d]+).*Mobile.*Safari/'
1706
+ - regex: '(?:Version/(\d+[\.\d]+).*)?Mobile.*Safari/'
922
1707
  name: 'Mobile Safari'
923
1708
  version: '$1'
924
1709
  engine:
@@ -933,3 +1718,38 @@
933
1718
  version: '$1'
934
1719
  engine:
935
1720
  default: 'WebKit'
1721
+
1722
+ #Dorado
1723
+ - regex: 'Dorado WAP-Browser[/ ](\d+[\.\d]+)'
1724
+ name: 'Dorado'
1725
+ version: '$1'
1726
+
1727
+ #NetSurf
1728
+ - regex: 'NetSurf(?:/(\d+[\.\d]+))?'
1729
+ name: 'NetSurf'
1730
+ version: '$1'
1731
+ engine:
1732
+ default: 'NetSurf'
1733
+
1734
+ # Uzbl (https://www.uzbl.org/)
1735
+ - regex: 'Uzbl'
1736
+ name: 'Uzbl'
1737
+ version: ''
1738
+
1739
+ # SimpleBrowser (https://github.com/SimpleBrowserDotNet/SimpleBrowser)
1740
+ - regex: 'SimpleBrowser'
1741
+ name: 'SimpleBrowser'
1742
+ version: ''
1743
+
1744
+ # Zvu
1745
+ - regex: 'Zvu(?:/(\d+[\.\d]+))?'
1746
+ name: 'Zvu'
1747
+ version: '$1'
1748
+ engine:
1749
+ default: 'Gecko'
1750
+
1751
+ # GOG Galaxy
1752
+ - regex: 'GOGGalaxyClient/(?:(\d+[\.\d]+))?'
1753
+ name: 'GOG Galaxy'
1754
+ version: '$1'
1755
+