)]}'
{"id": 6436406437871616, "name": "WebGPU Compatibility mode", "summary": "Adds an opt-in, lightly restricted subset of the WebGPU API capable of running older graphics APIs such as OpenGL and Direct3D11. By opting into this mode and obeying its constraints, developers can extend the reach of their WebGPU applications to many older devices that do not have the modern, explicit graphics APIs that core WebGPU requires. For simple applications, the only required change is to specify the \"compatibility\" featureLevel when calling requestAdapter. For more advanced applications, some modifications may be necessary to accommodate the mode's restrictions. Since Compatibility mode is a subset, the resulting applications are also valid WebGPU Core applications and will run even on user agents that do not support Compatibility mode.", "markdown_fields": [], "blink_components": ["Blink>WebGPU"], "star_count": 109, "search_tags": [], "created": {"by": "senorblanco@google.com", "when": "2025-03-20 19:28:54.533248"}, "updated": {"by": "senorblanco@google.com", "when": "2026-03-18 19:31:09.254878"}, "category": "Graphics", "category_int": 14, "feature_notes": null, "web_feature": "webgpu", "is_official_web_feature": true, "webdx_usecounter_enum": "290", "enterprise_feature_categories": [], "enterprise_product_category": 0, "is_releasenotes_content_reviewed": false, "is_releasenotes_publish_ready": false, "stages": [{"id": 4793742911078400, "created": "2025-03-20 19:28:55.284773", "feature_id": 6436406437871616, "stage_type": 110, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 6503032143216640, "created": "2025-03-20 19:28:55.339342", "feature_id": 6436406437871616, "stage_type": 120, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 4823596155011072, "created": "2025-03-20 19:28:55.441888", "feature_id": 6436406437871616, "stage_type": 130, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5071223031332864, "created": "2025-03-20 19:28:55.485317", "feature_id": 6436406437871616, "stage_type": 140, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 4885334456008704, "created": "2025-03-20 19:28:55.557164", "feature_id": 6436406437871616, "stage_type": 150, "display_name": "WebGPU Compatibility Mode", "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/683618d7.170a0220.2aa17e.17c5.GAE%40google.com", "announcement_url": null, "experiment_goals": "API surfaces of particular interest are:\n- GPURequestAdapterOptions.featureLevel: when set to \"compatibility\", this attribute will cause GPU.requestAdapter() to return a GPUAdapter capable of vending GPUDevices restricted to Compatibility Mode.\n- GPUTextureDescriptor.textureBindingViewDimension\n- limits: maxStorageBuffersInVertexStage, maxStorageTexturesInVertexStage\n\nFeedback should include:\n- developers are capable of successfully creating Compatibility Mode Adapters and Devices\n- the validation messages produced when exceeding Compatibility Mode limitations are clear and actionable\n- any previously-unknown classes of useful content which are particularly difficult or impossible to be expressed in Compatibility Mode\n- where the OpenGLES backend is enabled (to be controlled via a separate Finch trial), developers are successfully able to run Compatibility Mode content (e.g., the WebGPU samples) on devices which cannot run core WebGPU (e.g., Android OpenGLES)", "experiment_risks": "- Compatibility Mode validation would no longer be performed, so any new content written for Compatibilty Mode would no longer validate\n- Compatibility Mode content would no longer run on Compatbiility-only devices (e.g., OpenGLES-only Android)\n\nNon-Risk:\nCompatibility Mode is a subset of Core WebGPU, and all Compatibility Mode content is valid Core WebGPU content. Thus, Compatibility Mode content would continue to run on the Core WebGPU implementations it does today. As an example, the canonical WebGPU samples were updated to support Compatibility Mode, even though no browsers currently support it by default. They continue to run just fine in Core-only browsers.", "origin_trial_id": "1489002626799370241", "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": "WebGPUCompatibilityMode", "ot_description": "WebGPU Compatibility Mode is an opt-in, lightly restricted subset of WebGPU capable of running older graphics APIs such as OpenGL and Direct3D11. The goal is to expand the reach of WebGPU applications to older devices that do not have the modern, explicit graphics APIs that core WebGPU requires.", "ot_display_name": "WebGPU Compatibility Mode", "ot_documentation_url": "https://github.com/explainers-by-googlers/webgpu-compatibility-mode/blob/main/README.md", "ot_emails": ["kainino@google.com"], "ot_feedback_submission_url": "https://github.com/gpuweb/gpuweb/issues", "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": "senorblanco@google.com", "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": 5595, "ot_webfeature_use_counter": "kWebGPUFeatureLevelCompatibility", "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": 0, "enterprise_policies": [], "desktop_first": 139, "android_first": 139, "ios_first": null, "webview_first": 139, "desktop_last": 145, "android_last": 145, "ios_last": null, "webview_last": 145, "ot_setup_status": 6}, {"id": 5931559296958464, "created": "2025-03-20 19:28:55.808699", "feature_id": 6436406437871616, "stage_type": 160, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6966a808.050a0220.215908.002f.GAE%40google.com", "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": 146, "android_first": 146, "ios_first": null, "webview_first": 146, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}], "accurate_as_of": "2026-03-18 19:31:09.254878", "creator_email": "senorblanco@google.com", "updater_email": "senorblanco@google.com", "owner_emails": ["senorblanco@google.com", "kainino@google.com"], "editor_emails": ["cwallez@google.com", "fbeaufort@google.com", "dneto@google.com"], "cc_emails": [], "spec_mentor_emails": [], "unlisted": false, "deleted": false, "editors": ["cwallez@google.com", "fbeaufort@google.com", "dneto@google.com"], "cc_recipients": [], "spec_mentors": [], "creator": "senorblanco@google.com", "feature_type": "New or changed feature", "feature_type_int": 0, "intent_stage": "None", "intent_stage_int": 0, "active_stage_id": 5931559296958464, "bug_url": "https://crbug.com/442618060", "launch_bug_url": null, "new_crbug_url": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink>WebGPU&blocking=442618060&cc=senorblanco@google.com,kainino@google.com", "screenshot_links": [], "first_enterprise_notification_milestone": null, "enterprise_impact": 1, "breaking_change": false, "confidential": false, "shipping_year": 2026, "flag_name": null, "finch_name": "WebGPUCompatibilityMode", "non_finch_justification": null, "ongoing_constraints": "None", "rollout_plan": 0, "rollout_plan_displayname": "Will ship enabled for all users", "motivation": "WebGPU is a good match for modern graphics APIs such as Vulkan, Metal and Direct3D 12. However, there are a large number of devices which do not yet support those APIs. In particular, on Chrome on Windows, 31% of Chrome users do not have Direct3D FL 11.1 or higher. On Android, 23% of Android users do not have Vulkan 1.1, including 15% who do not have Vulkan at all (https://developer.android.com/about/dashboards). On ChromeOS, Vulkan penetration is still quite low, while OpenGL ES 3.1 is ubiquitous.\n\nDevelopers are thus forced to write multiple implementations (e.g., WebGPU and WebGL) for maximum reach, to accept the reduced reach that core WebGPU currently provides, or to write only for WebGL and forgo the advanced features of WebGPU, such as GPU compute. By opting in to Compatibility Mode, developers can target a wider reach of devices with a single implementation.", "devtrial_instructions": null, "activation_risks": null, "measurement": null, "availability_expectation": "Mozilla is interested in this feature (and has approved all of the spec changes) but has not committed to implementing it yet.\n\nApple has approved all of the spec changes, but it is not anticipated that this feature will ship in Safari since all Apple devices on the market can support the full Core WebGPU spec. However, since it is designed as a subset, Compatibility mode applications will work unchanged in browsers that only support Core (e.g., Safari).", "adoption_expectation": "Feature is used by specific partner(s) to provide functionality within 12 months of launch in Chrome.", "adoption_plan": "Adoption of Core WebGPU proceeds apace (https://chromestatus.com/metrics/feature/timeline/popularity/4029), and it is expected that developers will adopt Compatibility Mode because it allows them to extend the reach of their WebGPU content to a larger audience.", "initial_public_proposal_url": "https://github.com/gpuweb/gpuweb/blob/main/proposals/compatibility-mode.md", "explainer_links": ["https://github.com/explainers-by-googlers/webgpu-compatibility-mode/blob/main/README.md"], "requires_embedder_support": false, "spec_link": "https://github.com/gpuweb/gpuweb/blob/main/proposals/compatibility-mode.md", "api_spec": true, "automation_spec": false, "interop_compat_risks": "This feature has been approved in W3C GPU for the Web WG meetings including participants from Safari and Firefox.", "all_platforms": null, "all_platforms_descr": "All platforms will eventually have support. Will immediately be available on Android, Android WebView, ChromeOS, Mac, and Windows, where hardware support is available. Linux is planned to have WebGPU support in the future, so this feature will become available when WebGPU does.", "non_oss_deps": "On Android, this feature depends on the OpenGLES 3.1 graphics API in order to provide WebGPU capability to older devices.\n\nThe JavaScript API will be available on all platforms, including desktop, but will not require any new graphics APIs; it will simply allow developers to test the Compatibility Mode subset on all Chrome platforms.", "anticipated_spec_changes": "All Compatibility Mode changes have landed in the WebGPU core spec: https://www.w3.org/TR/webgpu/; all known issues have been addressed.\n", "security_risks": "Being a lightly-restricted subset, Compatibility Mode does not introduce any accessibility, security, or privacy issues over and above those introduced by core WebGPU. For this reason, the security review submitted for WebGPU also applies to Compatibility Mode.", "ergonomics_risks": null, "wpt": true, "wpt_descr": "All Compatibility Mode restrictions are exercised by the \"compatibility\" option to the WebGPU CTS. E.g., https://gpuweb.github.io/cts/standalone/?compatibility=1&q=webgpu:*\n\nThis subset is tested extensively on the Dawn CI (https://ci.chromium.org/p/chromium/g/chromium.dawn/console) under the \"webgpu_cts_compat_tests\" suite.\n\nWebGPU/WGSL have a conformance test suite (https://github.com/gpuweb/cts) that is regularly pulled into Chromium and part of the testing of Dawn/Tint in Chromium. While the CTS can be embedded in WPT, the WebGPU team opted to keep it separate in Chromium testing to use a customized harness for robustness and performance.", "webview_risks": "Low; does not remove or alter existing APIs. Provides a lightly-restricted subset of the WebGPU API to older devices which are not capable of the core WebGPU API\n\nIn case of emergency, there are two independent killswitches:\n\n- kWebGPUAndroidOpenGLES controls the Dawn OpenGLES backend on Android in the GPU process\n- RuntimeEnabledFeature kWebGPUCompatibilityMode controls the JS API in the renderer process", "devrel_emails": ["devrel-chromestatus-all@google.com"], "debuggability": null, "doc_links": [], "sample_links": ["https://webgpu.github.io/webgpu-samples/?sample=helloTriangle", "https://webgpu.github.io/webgpu-samples/?sample=computeBoids", "https://webgpu.github.io/webgpu-samples/?sample=deferredRendering"], "prefixed": null, "tags": [], "tag_review": "https://github.com/w3ctag/design-reviews/issues/1063", "tag_review_status": "Issues addressed", "tag_review_status_int": 3, "security_review_status": "Not applicable", "security_review_status_int": 4, "privacy_review_status": "Not applicable", "privacy_review_status_int": 4, "security_continuity_id": null, "security_launch_issue_id": null, "updated_display": null, "resources": {"samples": ["https://webgpu.github.io/webgpu-samples/?sample=helloTriangle", "https://webgpu.github.io/webgpu-samples/?sample=computeBoids", "https://webgpu.github.io/webgpu-samples/?sample=deferredRendering"], "docs": []}, "comments": null, "ff_views": 3, "safari_views": 3, "web_dev_views": 2, "browsers": {"chrome": {"bug": "https://crbug.com/442618060", "blink_components": ["Blink>WebGPU"], "devrel": ["devrel-chromestatus-all@google.com"], "owners": ["senorblanco@google.com", "kainino@google.com"], "origintrial": false, "prefixed": null, "flag": false, "status": {"text": "Proposed", "val": 2, "milestone_str": "Proposed"}, "announced": true, "desktop": 146, "android": 146, "webview": 146, "ios": null}, "ff": {"view": {"url": null, "notes": "Although there is not currently an entry for Compatibility Mode in the standards positions repos, WebGPU Compatibility Mode was discussed and approved by Google, Apple and Mozilla in the GPU for the Web Working Group, and has the same support as WebGPU Core. Each of the commits to the compatibility-mode propsal above was approved by a working group member from each of those three organizations, and any disagreements were resolved prior to landing in Working Group meetings.", "text": "Positive", "val": 3}}, "safari": {"view": {"url": null, "notes": "Although there is not currently an entry for Compatibility Mode in the standards positions repos, WebGPU Compatibility Mode was discussed and approved by Google, Apple and Mozilla in the GPU for the Web Working Group, and has the same support as WebGPU Core. Each of the commits to the compatibility-mode propsal above was approved by a working group member from each of those three organizations, and any disagreements were resolved prior to landing in Working Group meetings.", "text": "Positive", "val": 3}}, "webdev": {"view": {"text": "Positive", "val": 2, "url": null, "notes": "From Unity:\n\nWebGPU is a critical component of Unity's web strategy moving forward. WebGPU provides a lot of technological advantages over WebGL, and has proven to enable more capabilities for our users, and in many cases increase performance. One important piece of the WebGPU adoption strategy is device reach. WebGPU does not have the device reach that WebGL has, requiring users to include both WebGPU and WebGL drivers in their applications. WebGPU Compatibility Mode will be a vital solution to this issue. Having the ability to significantly increase the device reach of WebGPU by utilizing Compatibility Mode will allow many developers to drop WebGL, simplify their development process and reduce their build sizes. The limitations imposed by Compatibility Mode will be something Unity developers can work with, as they are already accustomed to feature checking capabilities of devices running their applications. We expect enough of Unity will run in Compatibility Mode to minimize development difficulties, and that Compatibility Mode will be an automatic fallback for when Core mode is not available for Unity applications. "}}, "other": {"view": {"text": null, "val": null, "url": null, "notes": null}}}, "standards": {"spec": "https://github.com/gpuweb/gpuweb/blob/main/proposals/compatibility-mode.md", "maturity": {"text": "Specification currently under development in a Working Group", "short_text": "Working draft", "val": 4}}, "is_released": false, "is_enterprise_feature": false, "experiment_timeline": null, "ai_test_eval_report": null, "ai_test_eval_run_status": null, "ai_test_eval_status_timestamp": null}