{"id":15310645,"url":"https://github.com/timvanscherpenzeel/detect-features","last_synced_at":"2025-07-22T13:33:56.252Z","repository":{"id":28740065,"uuid":"107602566","full_name":"TimvanScherpenzeel/detect-features","owner":"TimvanScherpenzeel","description":"Detect and report browser and hardware features.","archived":false,"fork":false,"pushed_at":"2022-12-09T08:19:41.000Z","size":669,"stargazers_count":72,"open_issues_count":14,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-06-10T16:45:25.876Z","etag":null,"topics":["browser","detection","device-detection","extensions","features","hardware","reporting","web-worker","webgl","webgl2"],"latest_commit_sha":null,"homepage":"https://timvanscherpenzeel.github.io/detect-features/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TimvanScherpenzeel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-19T21:52:05.000Z","updated_at":"2024-04-01T10:10:57.000Z","dependencies_parsed_at":"2023-01-14T10:01:06.848Z","dependency_job_id":null,"html_url":"https://github.com/TimvanScherpenzeel/detect-features","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TimvanScherpenzeel/detect-features","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimvanScherpenzeel%2Fdetect-features","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimvanScherpenzeel%2Fdetect-features/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimvanScherpenzeel%2Fdetect-features/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimvanScherpenzeel%2Fdetect-features/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TimvanScherpenzeel","download_url":"https://codeload.github.com/TimvanScherpenzeel/detect-features/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimvanScherpenzeel%2Fdetect-features/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266506174,"owners_count":23940019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","detection","device-detection","extensions","features","hardware","reporting","web-worker","webgl","webgl2"],"created_at":"2024-10-01T08:28:55.127Z","updated_at":"2025-07-22T13:33:56.231Z","avatar_url":"https://github.com/TimvanScherpenzeel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Detect features\n\n[![npm version](https://badge.fury.io/js/detect-features.svg)](https://badge.fury.io/js/detect-features)\n[![gzip size](https://img.badgesize.io/https:/unpkg.com/detect-features/dist/detect-features.esm.js?compression=gzip)](https://unpkg.com/detect-features)\n[![install size](https://packagephobia.now.sh/badge?p=detect-features)](https://packagephobia.now.sh/result?p=detect-features)\n\nDetect and report browser and hardware features.\n\n## Demo\n\n[Live demo](https://timvanscherpenzeel.github.io/detect-features/)\n\n## Installation\n\nMake sure you have [Node.js](http://nodejs.org/) installed.\n\n```sh\n $ npm install detect-features\n```\n\n## Usage\n\n```ts\nimport { getFeatures } from 'detect-features';\n\n(async () =\u003e {\n  const features = await getFeatures();\n})();\n```\n\nExample output\n\n```json\n{\n  \"browserFeatures\": {\n    \"browserType\": {\n      \"browserName\": \"Chrome\",\n      \"browserVersion\": \"86.0\",\n      \"isAndroid\": false,\n      \"isChrome\": true,\n      \"isChromium\": false,\n      \"isDesktop\": true,\n      \"isEdge\": false,\n      \"isFirefox\": false,\n      \"isInternetExplorer\": false,\n      \"isMobile\": false,\n      \"isOpera\": false,\n      \"isSafari\": false,\n      \"isSamsungBrowser\": false,\n      \"isTablet\": false,\n      \"isUCBrowser\": false,\n      \"isYandexBrowser\": false,\n      \"isiOS\": false\n    },\n    \"isAnimationWorkletSupported\": false,\n    \"isAudioWorkletSupported\": true,\n    \"isBroadcastChannelSupported\": true,\n    \"isCryptoSupported\": true,\n    \"isFetchSupported\": true,\n    \"isGamepadSupported\": true,\n    \"isImageBitmapSupported\": true,\n    \"isImageDecodeSupported\": true,\n    \"isIndexedDBSupported\": true,\n    \"isIntersectionObserverSupported\": true,\n    \"isLayoutWorkletSupported\": false,\n    \"isLocalStorageSupported\": true,\n    \"isMutationObserverSupported\": true,\n    \"isOffscreenCanvasSupported\": true,\n    \"isPaintWorkletSupported\": true,\n    \"isPerformanceNowSupported\": true,\n    \"isPerformanceObserverSupported\": true,\n    \"isRequestIdleCallbackSupported\": true,\n    \"isServiceWorkerSupported\": true,\n    \"isSessionStorageSupported\": true,\n    \"isUserActivationSupported\": true,\n    \"isWebAssemblySupported\": true,\n    \"isWebAudioSupported\": true,\n    \"isWebGL2Supported\": true,\n    \"isWebGLSupported\": true,\n    \"isWebPSupported\": true,\n    \"isWebRTCSupported\": true,\n    \"isWebSocketSupported\": true,\n    \"isWebVRSupported\": false,\n    \"isWebWorkerInlineSupported\": true,\n    \"isWebWorkerSupported\": true,\n    \"isWebXRSupported\": true,\n    \"mediaFeatures\": {\n      \"audio\": {\n        \"MP3\": true,\n        \"Ogg\": true,\n        \"WAV\": true\n      },\n      \"video\": {\n        \"HLS\": false,\n        \"MP4\": true,\n        \"Ogg\": true,\n        \"WebM\": true\n      }\n    },\n    \"webGL2Features\": {\n      \"base\": {\n        \"renderer\": \"WebKit WebGL\",\n        \"rendererUnmasked\": \"Intel(R) Iris(TM) Graphics 6100\",\n        \"shaderVersion\": \"WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)\",\n        \"vendor\": \"WebKit\",\n        \"vendorUnmasked\": \"Intel Inc.\",\n        \"version\": \"WebGL 2.0 (OpenGL ES 3.0 Chromium)\"\n      },\n      \"general\": {\n        \"aliasedLineWidthRange\": \"1,1\",\n        \"aliasedPointSizeRange\": \"1,255.875\",\n        \"alphaBits\": 8,\n        \"antialias\": true,\n        \"blueBits\": 8,\n        \"depthBits\": 24,\n        \"greenBits\": 8,\n        \"maxCombinedTextureImageUnits\": 80,\n        \"maxCubeMapTextureSize\": 16384,\n        \"maxFragmentUniformVectors\": 1024,\n        \"maxRenderBufferSize\": 16384,\n        \"maxTextureImageUnits\": 16,\n        \"maxTextureSize\": 16384,\n        \"maxVaryingVectors\": 15,\n        \"maxVertexAttributes\": 16,\n        \"maxVertexTextureImageUnits\": 16,\n        \"maxVertexUniformVectors\": 1024,\n        \"maxViewportDimensions\": \"16384,16384\",\n        \"precision\": {\n          \"fragmentShaderHighPrecision\": \"127,127,23\",\n          \"fragmentShaderLowPrecision\": \"127,127,23\",\n          \"fragmentShaderMediumPrecision\": \"127,127,23\",\n          \"vertexShaderHighPrecision\": \"127,127,23\",\n          \"vertexShaderLowPrecision\": \"127,127,23\",\n          \"vertexShaderMediumPrecision\": \"127,127,23\"\n        },\n        \"redBits\": 8,\n        \"stencilBits\": 8,\n        \"subPixelBits\": 8\n      },\n      \"extensions\": {\n        \"maxAnisotropy\": 16,\n        \"supportedExtensions\": [\n          \"EXT_color_buffer_float\",\n          \"EXT_disjoint_timer_query_webgl2\",\n          \"EXT_float_blend\",\n          \"EXT_texture_compression_rgtc\",\n          \"EXT_texture_filter_anisotropic\",\n          \"EXT_texture_norm16\",\n          \"OES_texture_float_linear\",\n          \"WEBGL_compressed_texture_s3tc\",\n          \"WEBGL_compressed_texture_s3tc_srgb\",\n          \"WEBGL_debug_renderer_info\",\n          \"WEBGL_debug_shaders\",\n          \"WEBGL_lose_context\",\n          \"WEBGL_multi_draw\",\n          \"WEBGL_video_texture\"\n        ],\n        \"compressedTextureASTCExtension\": null,\n        \"compressedTextureATCExtension\": null,\n        \"compressedTextureETC1Extension\": null,\n        \"compressedTextureETCExtension\": null,\n        \"compressedTexturePVRTCExtension\": null,\n        \"compressedTextureS3TCExtension\": {},\n        \"compressedTextureS3TCSRGBExtension\": {}\n      },\n      \"specific\": {\n        \"max3DTextureSize\": 2048,\n        \"maxArrayTextureLayers\": 2048,\n        \"maxClientWaitTimeout\": 0,\n        \"maxColorAttachments\": 8,\n        \"maxCombinedFragmentUniformComponents\": 249856,\n        \"maxCombinedUniformBlocks\": 75,\n        \"maxCombinedVertexUniformComponents\": 249856,\n        \"maxDrawBuffers\": 8,\n        \"maxElementIndex\": 4294967295,\n        \"maxElementsIndices\": 150000,\n        \"maxElementsVertices\": 1048575,\n        \"maxFragmentInputComponents\": 128,\n        \"maxFragmentUniformBlocks\": 15,\n        \"maxFragmentUniformComponents\": 4096,\n        \"maxProgramTexelOffset\": 7,\n        \"maxSamples\": 8,\n        \"maxServerWaitTimeout\": 0,\n        \"maxTextureLODBias\": 16,\n        \"maxTransformFeedbackInterleavedComponents\": 64,\n        \"maxTransformFeedbackSeparateAttribs\": 4,\n        \"maxTransformFeedbackSeparateComponents\": 4,\n        \"maxUniformBlockSize\": 65536,\n        \"maxUniformBufferBindings\": 75,\n        \"maxVaryingComponents\": 60,\n        \"maxVertexOutputComponents\": 128,\n        \"maxVertexUniformBlocks\": 15,\n        \"maxVertexUniformComponents\": 4096,\n        \"minProgramTexelOffset\": -8,\n        \"uniformBufferOffsetAlignment\": 256\n      }\n    },\n    \"webGLFeatures\": {\n      \"base\": {\n        \"renderer\": \"WebKit WebGL\",\n        \"rendererUnmasked\": \"Intel(R) Iris(TM) Graphics 6100\",\n        \"shaderVersion\": \"WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)\",\n        \"vendor\": \"WebKit\",\n        \"vendorUnmasked\": \"Intel Inc.\",\n        \"version\": \"WebGL 1.0 (OpenGL ES 2.0 Chromium)\"\n      },\n      \"general\": {\n        \"aliasedLineWidthRange\": \"1,1\",\n        \"aliasedPointSizeRange\": \"1,255.875\",\n        \"alphaBits\": 8,\n        \"antialias\": true,\n        \"blueBits\": 8,\n        \"depthBits\": 24,\n        \"greenBits\": 8,\n        \"maxCombinedTextureImageUnits\": 80,\n        \"maxCubeMapTextureSize\": 16384,\n        \"maxFragmentUniformVectors\": 1024,\n        \"maxRenderBufferSize\": 16384,\n        \"maxTextureImageUnits\": 16,\n        \"maxTextureSize\": 16384,\n        \"maxVaryingVectors\": 15,\n        \"maxVertexAttributes\": 16,\n        \"maxVertexTextureImageUnits\": 16,\n        \"maxVertexUniformVectors\": 1024,\n        \"maxViewportDimensions\": \"16384,16384\",\n        \"precision\": {\n          \"fragmentShaderHighPrecision\": \"127,127,23\",\n          \"fragmentShaderLowPrecision\": \"127,127,23\",\n          \"fragmentShaderMediumPrecision\": \"127,127,23\",\n          \"vertexShaderHighPrecision\": \"127,127,23\",\n          \"vertexShaderLowPrecision\": \"127,127,23\",\n          \"vertexShaderMediumPrecision\": \"127,127,23\"\n        },\n        \"redBits\": 8,\n        \"stencilBits\": 8,\n        \"subPixelBits\": 8\n      },\n      \"extensions\": {\n        \"maxAnisotropy\": 16,\n        \"maxDrawBuffers\": 8,\n        \"supportedExtensions\": [\n          \"ANGLE_instanced_arrays\",\n          \"EXT_blend_minmax\",\n          \"EXT_color_buffer_half_float\",\n          \"EXT_disjoint_timer_query\",\n          \"EXT_float_blend\",\n          \"EXT_frag_depth\",\n          \"EXT_shader_texture_lod\",\n          \"EXT_texture_compression_rgtc\",\n          \"EXT_texture_filter_anisotropic\",\n          \"WEBKIT_EXT_texture_filter_anisotropic\",\n          \"EXT_sRGB\",\n          \"OES_element_index_uint\",\n          \"OES_fbo_render_mipmap\",\n          \"OES_standard_derivatives\",\n          \"OES_texture_float\",\n          \"OES_texture_float_linear\",\n          \"OES_texture_half_float\",\n          \"OES_texture_half_float_linear\",\n          \"OES_vertex_array_object\",\n          \"WEBGL_color_buffer_float\",\n          \"WEBGL_compressed_texture_s3tc\",\n          \"WEBKIT_WEBGL_compressed_texture_s3tc\",\n          \"WEBGL_compressed_texture_s3tc_srgb\",\n          \"WEBGL_debug_renderer_info\",\n          \"WEBGL_debug_shaders\",\n          \"WEBGL_depth_texture\",\n          \"WEBKIT_WEBGL_depth_texture\",\n          \"WEBGL_draw_buffers\",\n          \"WEBGL_lose_context\",\n          \"WEBKIT_WEBGL_lose_context\",\n          \"WEBGL_multi_draw\",\n          \"WEBGL_video_texture\"\n        ],\n        \"compressedTextureASTCExtension\": null,\n        \"compressedTextureATCExtension\": null,\n        \"compressedTextureETC1Extension\": null,\n        \"compressedTextureETCExtension\": null,\n        \"compressedTexturePVRTCExtension\": null,\n        \"compressedTextureS3TCExtension\": {},\n        \"compressedTextureS3TCSRGBExtension\": {}\n      }\n    }\n  },\n  \"browserSettings\": {\n    \"isCookieEnabled\": true,\n    \"isDoNotTrackEnabled\": true\n  },\n  \"hardwareFeatures\": {\n    \"GPUTier\": {\n      \"fps\": 21,\n      \"gpu\": \"intel iris graphics 6100\",\n      \"isMobile\": false,\n      \"tier\": 1,\n      \"type\": \"BENCHMARK\"\n    },\n    \"availableCPUCores\": 4,\n    \"devicePixelRatio\": 2,\n    \"endianness\": \"little\"\n  }\n}\n```\n\n## Support\n\nSpecial care has been taken to make sure all browsers that support `WebGL` are also supported by `detect-features` including `IE 11`.\n\n## Licence\n\nMy work is released under the [MIT license](https://raw.githubusercontent.com/TimvanScherpenzeel/detect-features/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimvanscherpenzeel%2Fdetect-features","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimvanscherpenzeel%2Fdetect-features","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimvanscherpenzeel%2Fdetect-features/lists"}