Open-source project
google/dawn avatar
google/dawn

Dawn: the native WebGPU implementation behind Chromium

Native WebGPU implementation. Mirror of https://dawn.googlesource.com/dawn. File bugs here: https://crbug.com/dawn/new

1,190 stars223 forksC++NOASSERTION

At a glance

What is it?
Dawn is Google's open source, cross-platform implementation of WebGPU, and it is the code Chromium runs WebGPU on. It ships the C and C++ headers, native backends for D3D12, Metal, Vulkan and OpenGL, a client-server mode for sandboxed applications, and Tint, the WGSL compiler.
Who is it for?
Adopt Dawn if you are implementing WebGPU outside a browser, for example in a native application, an embedded runtime or a sandboxed process that has no access to GPU drivers, and you need the same implementation Chromium uses so behaviour matches. Do not adopt it as a first WebGPU project, because the build is a Chromium-scale C++ tree with Bazel, GN and CMake variants and the bug tracker is Chromium's rather than GitHub's.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One-to-one with the WebGPU IDL

Dawn is an open-source and cross-platform implementation of the WebGPU standard. The description is more precise than that, though: it implements webgpu.h, which is a one-to-one mapping with the WebGPU IDL.

That one-to-one property is the design constraint that shapes the whole project. The WebGPU interface is defined by an IDL, and Dawn's C header mirrors it directly, so a WebGPU API in a browser and the same API in Dawn have the same shape, the same enumerants and the same semantics. For an implementation that has to be the reference, that correspondence is not a convenience, it is the specification.

Dawn is meant to be integrated as part of a larger system, and it is the underlying implementation of WebGPU in Chromium. The primary language is C++, and the repository is enormous by any measure, with a src/ tree, third_party/, tools/, generator/, infra/, scripts/, testing/ and test/ directories.

There is one structural fact that changes how you read everything else. This GitHub repository is a mirror of the canonical source at dawn.googlesource.com/dawn, and the project description says to file bugs at crbug.com/dawn/new rather than here. So the code you read here is the code Chromium builds, but the workflow around it lives in Chromium's issue tracker, its Gerrit code review and its own continuous integration.

Four building blocks in one project

Dawn provides several WebGPU building blocks, and the list is short enough to hold in your head.

The first is the WebGPU C and C++ headers that applications and other building blocks use. That is two things: the webgpu.h version that Dawn implements, which is the C header mirroring the IDL, and a C++ wrapper for it. The wrapper matters more than it sounds, because a C API is unpleasant to call directly from C++.

The second is the native implementation of WebGPU using the platforms' GPU APIs, namely D3D12, Metal, Vulkan and OpenGL. There is a per API support document at docs/support.md, and the reason to point at it is obvious once you know the four backends exist: how much of WebGPU you get depends heavily on which one you are on.

The third is a client-server implementation of WebGPU, for applications that are in a sandbox without access to native drivers. This is the piece that makes WebGPU usable in environments where the graphics driver simply is not reachable, and it is why the building blocks list includes a mode that is not a backend at all.

The fourth is Tint, the compiler for the WebGPU Shader Language, WGSL, which can be used in standalone to convert shaders from and to WGSL. Tint is a separate project with its own bug tracker, its own testing documentation and its own experimental extensions document, and in practice it is a large part of the codebase, since every shader that runs through WebGPU goes through it.

The build system is a Chromium-scale affair

The repository root is a list of build systems, which tells you what you are signing up for.

There is a Bazel setup with BUILD.bazel, WORKSPACE.bazel, MODULE.bazel, a .bazelrc, a .bazelignore and a .bazelversion. There is a GN setup with BUILD.gn, a .gn file and a DEPS file for the dependency list, plus buildtools/, build_overrides/ and third_party/. There is a CMake setup with CMakeLists.txt and CMakeSettings.json, and the documentation table of contents includes a quickstart with CMake page, which is the gentlest entry point. The build documentation itself is at docs/building.md.

Alongside those are the pieces of the Chromium continuous integration conventions. PRESUBMIT.py and PRESUBMIT_test.py are the presubmit checks, codereview.settings configures the code review, WATCHLISTS and OWNERS handle the per-directory ownership, and DIR_METADATA marks the directory for the Chromium infrastructure. There is a CPPLINT.cfg for the style checker, a .clang-format and a .clang-tidy, and a vpython.toml with a lock file for the Python tooling the build depends on.

The Go side is the tooling rather than the product. The go.mod declares the module as dawn.googlesource.com/dawn with go 1.26, and the dependency list is a mixture that tells you what the infrastructure does: a WebIDL parser for the IDL handling, a Gerrit client for the code review workflow, chromedp for browser-driven testing, BigQuery and the Google API client for the results analysis, and grpc and luci for the internal services. There is also a .style.yapf for the Python formatting.

The upshot is that Dawn is a Chromium project in structure, not merely in affiliation, and building it the Chromium way is a supported path with a long learning curve attached.

The conformance suite and the standalone runner

Testing is where an implementation like this earns trust, and Dawn's testing story is built around the WebGPU CTS.

The repository contains a webgpu-cts/ directory, and the documentation list includes a page on running the WebGPU CTS with the standalone runner, at docs/standalone_cts_runner.md. The conformance test suite is the thing that makes the claim of implementing the standard checkable, and the standalone runner is what lets you run it against Dawn itself, outside a browser, which is what a native embedder needs.

There is separate documentation for testing Dawn and for testing Tint, at docs/dawn/testing.md and docs/tint/testing.md, and a debugging page at docs/dawn/debugging.md that is worth knowing about before you start, because graphics implementation bugs are hard to see without the right tooling.

The infrastructure page, docs/dawn/infra.md, and the Dawn errors page, docs/dawn/errors.md, describe the machine readable error handling the implementation uses, which matters for anyone trying to map a WebGPU validation error back to a cause.

The Tint side has its own experimental extensions document, docs/tint/experimental_extensions.md, which is a good signal about where the WGSL compiler is heading, since extensions are how a shading language grows before the standard catches up.

The rest of the documentation is contributor-facing. There is a CONTRIBUTING.md, a CODE_OF_CONDUCT.md, and a page on becoming a committer, which tells you that this is a project with a real committer process rather than an open patch queue.

Where to report what

The helpful links section is short and specific, and following it saves a lot of confusion.

Dawn bugs go to the Dawn bug tracker, which is a saved search in the Chromium issue tracker, and a new issue is created through the Chromium issue tracker with a specific component. Tint bugs go to the Tint bug tracker, another saved search, with its own component. The mailing list, dawn-graphics on Google Groups, is for other discussions related to Dawn. The canonical source is at dawn.googlesource.com/dawn, and the live discussion around contributing to or using Dawn happens in a Matrix chatroom, with a separate WebGPU Matrix chatroom for the standard rather than the implementation.

Two of those deserve emphasis for a newcomer. The first is that GitHub issues are not the place to file bugs, because the project description points at crbug.com/dawn/new. The second is that the code review itself is not on GitHub either; the presence of a Gerrit client in the Go dependencies confirms that the review flow lives in Chromium's Gerrit, with GitHub acting as a read-only mirror for most people.

The disclaimer is short and worth quoting: this is not an officially supported Google product. It is a Google open source project without the support commitment that implies, and the BSD 3-Clause licence is the concrete statement of what you get. The licence file is at the root, and the repository's own licence classification on GitHub is reported as a custom one that GitHub cannot categorise, so the LICENSE file is the text to rely on.

Nightly tags and a moving target

The release pattern is the one to expect from a project that tracks a fast-moving standard, and it is worth understanding before you pin anything.

The recent tags are v20261009.190412 from 2026-10-10, v20261013.193955 from 2026-10-14 and v20261014.133826 from 2026-10-15, and the last push was on 2026-10-19. The naming is a date and a time of day, which is a strong signal that these are nightly snapshots rather than curated releases. The last one, 20261014.133826, is the build from the evening of 14 October published on the 15th.

That has an important consequence for adoption. There is no stable channel in the usual sense. A tag is a moment in time, and if you need a specific WebGPU feature that landed last week you are choosing the snapshot that contains it, which means you are choosing a specific date's behaviour rather than a version with a compatibility promise.

The mitigation is the test suite. The WebGPU CTS and the standalone runner exist precisely so that a given snapshot can be checked against the standard, and that is the way to decide whether a particular nightly is good enough for you.

The repository also carries a.vscode/ directory, an agents/ directory and a.git-blame-ignore-revs file, which is a Chromium convention for commits that should be ignored when running git blame. The last one is a small indicator of a very large commit history, and the go_presubmit_support.py file at the root is the Python support code for the presubmit checks.

Editorial conclusion

Adopt Dawn if you are implementing WebGPU outside a browser, for example in a native application, an embedded runtime or a sandboxed process that has no access to GPU drivers, and you need the same implementation Chromium uses so behaviour matches. Do not adopt it as a first WebGPU project, because the build is a Chromium-scale C++ tree with Bazel, GN and CMake variants and the bug tracker is Chromium's rather than GitHub's. Before you start, read docs/dawn/overview.md and docs/building.md, check the per API support page for your graphics backend, and decide early whether you are building with CMake or with the Chromium build system, since that choice changes most of your setup.

Frequently asked questions

What is Dawn and how does it relate to WebGPU in browsers?

Dawn is an open-source, cross-platform implementation of WebGPU that implements webgpu.h as a one-to-one mapping with the WebGPU IDL. It is meant to be integrated as part of a larger system, and it is the underlying implementation of WebGPU in Chromium.

Which graphics APIs does Dawn support?

The native implementation uses the platforms' GPU APIs, namely D3D12, Metal, Vulkan and OpenGL. The per API support page at docs/support.md has the details, and how much of WebGPU you get depends on which backend you are running.

What is Tint in the Dawn project?

Tint is the compiler for the WebGPU Shader Language, WGSL, and it can be used in standalone to convert shaders from and to WGSL. It has its own bug tracker in the Chromium issue tracker, its own testing documentation and its own experimental extensions page.

How do I report a bug in Dawn?

Not on GitHub. The project description points at crbug.com/dawn/new, and the README links a saved search for Dawn issues in the Chromium issue tracker, with a separate saved search and component for Tint. Dawn bugs and Tint bugs go to different components, and general discussion goes to the dawn-graphics mailing list or the Matrix chatroom.

How is Dawn licensed and how are its releases tagged?

It is under the BSD 3-Clause Licence, with the disclaimer that it is not an officially supported Google product. The tags are nightly snapshots named by date and time, for example v20261014.133826 published on 2026-10-15, rather than curated releases.

Official sources

  1. google/dawn on GitHub
  2. Issues
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/google-dawn.svg)](https://hysenlabs.com/projects/google-dawn)

Was this useful?