Open reimplementation of Google's Widevine Content Decryption Module for browsers
Rust
280
173 commits
updated Jul 22, 2026
OpenWV is a free and open-source reimplementation of Google's Widevine Content Decryption Module (CDM), the portion of the Widevine DRM system that runs in your browser, obtains content keys for protected media, and decrypts the media using those keys. OpenWV is a drop-in replacement for Google's official, proprietary CDM and implements the same shared library API.
OpenWV does not come with a device identity and will not work without one.
A device identity, typically stored as a .wvd file, contains
metadata about a Widevine client as well as a private key that authenticates
that client to Widevine license servers. Some license servers return different
sets of content keys to different clients: for example, many content providers
encrypt high-definition content with a separate key and only give that key to
device identities from hardware-backed ("L1") CDMs. If you want to use OpenWV,
you must obtain an appropriate .wvd file yourself and include it in the build
as described below.
Because CDM libraries are heavily sandboxed by browsers, OpenWV cannot read configuration from disk at runtime. That means that all configuration, including the device identity mentioned above, must be present at build-time. As such, there are no official precompiled binaries: the only way to use OpenWV is to build it yourself.
To build OpenWV, follow these steps:
winget install LLVM.LLVM.)git clone --recurse-submodules -c submodule.recurse=true https://github.com/tchebb/openwv.git.wvd file in the project root (alongside this README) and name
it embedded.wvd. You may set other configuration options as desired by
editing the CONFIG variable in src/config.rs.cargo build --releasetarget/release/. Depending on your OS, it will
be named libwidevinecdm.so, widevinecdm.dll, or libwidevinecdm.dylib.NOTE: In these instructions, "the OpenWV library" means the library you built
in the last section—libwidevinecdm.so on Linux, widevinecdm.dll on Windows,
or libwidevinecdm.dylib on macOS.
about:support and note your "Profile Directory".about:config. Set media.gmp-widevinecdm.autoupdate to false
(creating it if needed), and set media.gmp-widevinecdm.version to openwv
(or to another name for the directory you'll create in step 4).gmp-widevinecdm/ within your profile directory.openwv and place the OpenWV library and
manifest-firefox.json, renamed to manifest.json, inside it. Note that
you must use OpenWV's manifest.json instead of Google's, as Firefox
will not play video if we falsely advertise decoding support.If you manually check for addon updates, Firefox will replace OpenWV with
Google's CDM. The media.gmp-widevinecdm.autoupdate setting prevents
automatic updates, but there's no way to prevent manual
updates. If this happens, set media.gmp-widevinecdm.version back to
openwv—no need to repeat the other steps.
chrome://version/ and note the parent directory of your "Profile
Path". This is Chrome's "User Data Directory".WidevineCdm/ within the User Data Directory.9999 (or any numeric version greater than that
of Google's CDM), and place OpenWV's manifest-chromium.json, renamed to
manifest.json, inside it.manifest.json, create a directory named _platform_specific with
a directory named {linux,win,mac}_{x86,x64,arm,arm64}, as appropriate,
inside it. For example, _platform_specific/linux_x64/ on 64-bit Intel
Linux. Place the OpenWV library in this innermost directory.encrypt_client_id: EncryptClientId::Never, as Kodi
cannot handle service certificate request messages as of this writing
(InputStream Adaptive v21.5.10).The APIs, algorithms, and data types used in OpenWV were gathered from a variety of official and unofficial sources:
third-party/cdm/) come from the Chromium source.third-party/widevine_protos.pb) were
extracted from chromecast_oss/chromium/src/out_chromecast_steak/release/pyproto/
in Google's Chromecast Ultra v1.42 source drop..wvd format and many algorithmic details come from the pywidevine
project.173 commits
Rust
94.4%
C++
5.6%
Open reimplementation of Google's Widevine Content Decryption Module for browsers
Rust
280
173 commits
updated Jul 22, 2026
OpenWV is a free and open-source reimplementation of Google's Widevine Content Decryption Module (CDM), the portion of the Widevine DRM system that runs in your browser, obtains content keys for protected media, and decrypts the media using those keys. OpenWV is a drop-in replacement for Google's official, proprietary CDM and implements the same shared library API.
OpenWV does not come with a device identity and will not work without one.
A device identity, typically stored as a .wvd file, contains
metadata about a Widevine client as well as a private key that authenticates
that client to Widevine license servers. Some license servers return different
sets of content keys to different clients: for example, many content providers
encrypt high-definition content with a separate key and only give that key to
device identities from hardware-backed ("L1") CDMs. If you want to use OpenWV,
you must obtain an appropriate .wvd file yourself and include it in the build
as described below.
Because CDM libraries are heavily sandboxed by browsers, OpenWV cannot read configuration from disk at runtime. That means that all configuration, including the device identity mentioned above, must be present at build-time. As such, there are no official precompiled binaries: the only way to use OpenWV is to build it yourself.
To build OpenWV, follow these steps:
winget install LLVM.LLVM.)git clone --recurse-submodules -c submodule.recurse=true https://github.com/tchebb/openwv.git.wvd file in the project root (alongside this README) and name
it embedded.wvd. You may set other configuration options as desired by
editing the CONFIG variable in src/config.rs.cargo build --releasetarget/release/. Depending on your OS, it will
be named libwidevinecdm.so, widevinecdm.dll, or libwidevinecdm.dylib.NOTE: In these instructions, "the OpenWV library" means the library you built
in the last section—libwidevinecdm.so on Linux, widevinecdm.dll on Windows,
or libwidevinecdm.dylib on macOS.
about:support and note your "Profile Directory".about:config. Set media.gmp-widevinecdm.autoupdate to false
(creating it if needed), and set media.gmp-widevinecdm.version to openwv
(or to another name for the directory you'll create in step 4).gmp-widevinecdm/ within your profile directory.openwv and place the OpenWV library and
manifest-firefox.json, renamed to manifest.json, inside it. Note that
you must use OpenWV's manifest.json instead of Google's, as Firefox
will not play video if we falsely advertise decoding support.If you manually check for addon updates, Firefox will replace OpenWV with
Google's CDM. The media.gmp-widevinecdm.autoupdate setting prevents
automatic updates, but there's no way to prevent manual
updates. If this happens, set media.gmp-widevinecdm.version back to
openwv—no need to repeat the other steps.
chrome://version/ and note the parent directory of your "Profile
Path". This is Chrome's "User Data Directory".WidevineCdm/ within the User Data Directory.9999 (or any numeric version greater than that
of Google's CDM), and place OpenWV's manifest-chromium.json, renamed to
manifest.json, inside it.manifest.json, create a directory named _platform_specific with
a directory named {linux,win,mac}_{x86,x64,arm,arm64}, as appropriate,
inside it. For example, _platform_specific/linux_x64/ on 64-bit Intel
Linux. Place the OpenWV library in this innermost directory.encrypt_client_id: EncryptClientId::Never, as Kodi
cannot handle service certificate request messages as of this writing
(InputStream Adaptive v21.5.10).The APIs, algorithms, and data types used in OpenWV were gathered from a variety of official and unofficial sources:
third-party/cdm/) come from the Chromium source.third-party/widevine_protos.pb) were
extracted from chromecast_oss/chromium/src/out_chromecast_steak/release/pyproto/
in Google's Chromecast Ultra v1.42 source drop..wvd format and many algorithmic details come from the pywidevine
project.173 commits
Rust
94.4%
C++
5.6%