Whisper.net: C# bindings for whisper.cpp
Whisper.net. Speech to text made simple using Whisper Models
At a glance
- What is it?
- Whisper.net wraps whisper.cpp in a NuGet package family so .NET applications can run OpenAI Whisper speech recognition locally. The core package is small; the runtime packages decide where inference actually happens.
- Who is it for?
- Adopt Whisper.net if you are shipping a .NET application that must transcribe audio on the user's machine or on your own server, and if you can accept the native runtime and CPU requirements listed in the README. Do not adopt it if you need a hosted transcription API, a managed service with no native dependencies, or a runtime the README does not list.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Whisper.net solves for .NET applications
Running Whisper from C# without a managed binding means shipping a native library, marshalling buffers across the boundary, and handling the model loading lifecycle yourself. Whisper.net packages that work into a NuGet package family. The README describes it as "Dotnet bindings for OpenAI Whisper made possible by whisper.cpp", so the inference engine is whisper.cpp and the .NET layer is the project's own code.
The audience is narrow and specific. You are building a desktop app, a server-side batch transcriber, a MAUI or Blazor application, or a mobile app that needs speech to text and cannot send audio to a third-party API. The supported platform list in the README covers Windows x86, x64 and ARM64, Linux x64, ARM64 and ARM, macOS x64 and ARM64, Android, iOS, MacCatalyst, tvOS and WebAssembly. That breadth is the main argument for the project: the same API surface is meant to work across all of it, with the runtime package changing underneath.
If your workload is a single transcription call against a cloud service, this is more machinery than you need. The value appears when the audio cannot leave the machine, or when per-minute API pricing is the thing you are trying to avoid.
The core package and the runtime packages are separate decisions
Whisper.net splits the managed API from the native engine. Whisper.net is the main package and, per the README, "does not include any runtimes". Whisper.net.AllRuntimes includes everything, and individual runtime packages such as Whisper.net.Runtime, Whisper.net.Runtime.NoAvx, Whisper.net.Runtime.Cuda, Whisper.net.Runtime.Cuda12, Whisper.net.Runtime.CoreML, Whisper.net.Runtime.OpenVino and Whisper.net.Runtime.Vulkan can be combined as needed.
This is a deliberate trade-off. Referencing AllRuntimes is convenient but pulls in native binaries for platforms you will never run on. Referencing one runtime keeps the output smaller but makes the build fail or the process fail at load time on an unexpected machine. The MultiRuntime example in the examples directory exists for the case where one application must select between runtimes at startup.
Each runtime carries its own pre-requisites, and they are not interchangeable. Whisper.net.Runtime.Cuda is built with the CUDA 13 toolchain and needs CUDA Toolkit 13.0.1 or newer. Whisper.net.Runtime.Cuda12 exists for "systems that only provide CUDA 12.x drivers" and needs CUDA Toolkit 12.4.1 or newer. Both are Windows x64 and Linux x64 only. CoreML covers macOS, iOS and MacCatalyst. OpenVINO covers Windows x64 and Linux x64. Vulkan is Windows x64 only.
The CPU runtime also has a floor. For x86 and x64, the README states the CPU must support AVX, AVX2, FMA and F16C instructions, and that CPUs without them need Whisper.net.Runtime.NoAvx instead. That check is worth doing before anything else, because a missing instruction set shows up as a crash rather than a clear error.
Installing Whisper.net and transcribing a first file
The README gives two installation routes. The first is the Package Manager Console command:
PM> Install-Package Whisper.net.AllRuntimesThe second is a package reference in the .csproj file, which is what most projects will use. The README shows version 1.9.1 for the main packages:
<PackageReference Include="Whisper.net.AllRuntimes" Version="1.9.1" />If you would rather ship only the CPU runtime, the README shows the two references to add instead:
<PackageReference Include="Whisper.net" Version="1.9.1" />
<PackageReference Include="Whisper.net.Runtime" Version="1.9.1" />After restoring, the README points to the Simple example under examples/Simple for the asynchronous workflow and examples/SimpleSync for the version without async processing. Those two files are the fastest way to see the factory, builder and processor sequence that the library expects, including how a model file is loaded and how the processor is disposed.
For audio input, the README links NAudio-based examples: examples/NAudioMp3 for mp3 files and examples/NAudioResampleWav for resampled wav. If you need to know what the reader should see, the honest answer is that the README does not print expected output anywhere. It links the example sources instead, so read the example before assuming a return shape.
The README also mentions a custom GPT inside ChatGPT, described as built to answer questions "based on this code, previous issues, and releases", and asks users to try it before opening a new question. That is a support shortcut, not documentation, and it should not be treated as a specification.
Parakeet is a second engine, not a drop-in swap
The repository now ships a second model family. Parakeet uses "a separate native engine and standalone package family", with packages Whisper.net.Runtime.Parakeet, Whisper.net.Runtime.Parakeet.NoAvx, Whisper.net.Runtime.Parakeet.Cuda, Whisper.net.Runtime.Parakeet.Cuda12 and Whisper.net.Runtime.Parakeet.Vulkan.
The important constraint is in the README's own table: CoreML and OpenVINO are Whisper-only, so a Parakeet build on Apple hardware has no accelerated backend listed. The README also says to "select the model family explicitly" while using "the normal factory, builder, and processor workflow". That means the API shape is familiar but the engine behind it is different, and the two families do not share a model file format by implication.
The Makefile confirms the separation at build time. It carries an ENGINE variable, appends a .Parakeet suffix to the runtime package name when ENGINE is parakeet, and passes -DWHISPER_NET_RUNTIME_NAME=$(ENGINE) into CMake. If you are building native runtimes yourself rather than consuming NuGet packages, that variable is the switch you set.
Where Whisper.net is the wrong choice
The most concrete limitation is platform coverage for GPU acceleration. CUDA, CUDA12, OpenVINO and Vulkan are all Windows x64 or Linux x64 only. On an ARM server or an Apple Silicon machine, the accelerated option is CoreML, which the README lists for macOS, iOS and MacCatalyst, and CoreML is Whisper-only. There is no documented path to GPU inference on Windows ARM64.
Second, the native dependency is real. Windows requires the Microsoft Visual C++ Redistributable for at least Visual Studio 2022 (x64), and Windows 11 or Windows Server 2022 or newer. Linux requires libstdc++6 and glibc 2.31. macOS pre-requisites are listed as "TBD" in both the Whisper.net.Runtime and Whisper.net.Runtime.NoAvx sections, which is a gap worth noting if macOS is your primary target.
Third, the versioning story is unusual. The recent releases on the repository are all named preview-nativelibs-*, with tags such as preview-nativelibs-eacbd82 from 2026-09-06. Those are native library previews, not the 1.9.1 managed package version the README references. Anyone tracking the project by release feed will see a stream of preview artifacts that do not map cleanly onto the package version they are consuming.
Finally, if you want a managed-only dependency with no native binaries, or a hosted endpoint that scales without you managing model files, this project is the wrong layer. It gives you the engine and expects you to supply the audio pipeline, the model files and the deployment environment.
How it compares to calling a hosted transcription API
The alternative most teams actually weigh is a cloud speech-to-text API. The difference is not accuracy claims, which this repository does not make; it is where the work happens and who owns the runtime.
With a hosted API, you send audio over the network and get text back. There is no native library, no CUDA toolkit version to match, no AVX check, and no model file to distribute. The costs are per-request pricing, network dependency, and the fact that the audio leaves your infrastructure.
With Whisper.net, inference runs in your process against a model file you supply. The README's platform matrix and pre-requisites are the price of that: you now own the native runtime, the GPU driver version, and the model distribution. In exchange, there is no per-minute billing and no audio leaving the machine, which is the reason most teams pick it.
The two are not mutually exclusive. A common shape is Whisper.net on the desktop or edge where audio is sensitive, and a hosted API on the server for overflow. The MultiRuntime example is the closest thing in the repository to acknowledging that runtime choice can be dynamic.
Licence, maintenance and what upgrading costs
Whisper.net is MIT licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are included. That is the licence text in the repository's LICENSE file. This is a description of the licence, not legal advice; if your organisation has specific obligations around native binaries or model weights, those are separate questions from the MIT grant on this code.
The repository is not archived, and the last push was on 2026-09-14. That is recent enough that the project is being worked on, but the visible activity is concentrated in preview native library releases rather than tagged managed releases, so "how often should I upgrade" has no clean answer from the release feed alone.
Upgrade cost is dominated by the runtime packages, not the managed API. Moving from CUDA 12 to CUDA 13 means changing Whisper.net.Runtime.Cuda12 to Whisper.net.Runtime.Cuda and confirming the machine has CUDA Toolkit 13.0.1 or newer. Moving from an AVX-capable machine to one without AVX means swapping Whisper.net.Runtime for Whisper.net.Runtime.NoAvx. Neither change is a code change; both are deployment changes, and both can fail at process start rather than at compile time. Pin your runtime package versions explicitly rather than floating them.
Editorial conclusion
Adopt Whisper.net if you are shipping a .NET application that must transcribe audio on the user's machine or on your own server, and if you can accept the native runtime and CPU requirements listed in the README. Do not adopt it if you need a hosted transcription API, a managed service with no native dependencies, or a runtime the README does not list. Before writing code, verify three things: that your target CPU supports AVX, AVX2, FMA and F16C (or that you have swapped in the NoAvx runtime), that your CUDA driver matches the CUDA 13 or CUDA 12 runtime package you install, and that the model file you intend to use is available to the process at runtime.
Frequently asked questions
What is Whisper.net?
It is a set of .NET bindings for OpenAI Whisper, built on whisper.cpp. The README describes the main Whisper.net package as containing the core functionality without any runtimes, with separate runtime packages for CPU, CUDA, CoreML, OpenVINO and Vulkan.
How do you use Whisper.net?
Install Whisper.net.AllRuntimes or a specific runtime package, then follow the factory, builder and processor workflow shown in the examples. The README points to examples/Simple for async processing and examples/SimpleSync for the synchronous version.
Is Whisper.net still usable?
The repository is not archived and the last push was on 2026-09-14. The README references version 1.9.1 for the managed packages, while the recent tagged releases are preview native library builds.
What is Whisper.net about?
The project provides C# bindings so .NET applications can run Whisper speech recognition and translation locally, using whisper.cpp as the native engine. The README lists CPU, CUDA 13, CUDA 12, CoreML, OpenVINO and Vulkan runtimes.
Community notes