Local AI for .NET.
Zero sidecars. In your process.
Language models, vision, speech synthesis, audio transcription, music, and image/video diffusion — all running directly inside your own .NET process. No Python. No llama.cpp. No background services to keep alive.
✓ Qwen2.5 0.5B Instruct, CPU backend, 5.4 s in total including model load (Ryzen 7 5700G, 11 Oct 2026, one run)
The wording differs from run to run at the default temperature.
Will it fit? Know before you download.
stingray scout reads only a model's header and tensor index, loads no weights, and estimates the memory a CPU run needs.
The table below is real scout output for real checkpoints, not a simulation. Pick your RAM.
stingray scout -r <owner/repo> -f <file> --budget 16G -c 4096Drop a GGUF here. It never leaves your browser.
This page reads the first 64 MB of the file (the header and tensor index) with JavaScript on your machine and uploads nothing. It shows what is in the file and whether Stingray admits its architecture.
Drop a .gguf file
or choose one. Nothing is sent anywhere; you can disconnect from the network and it still works.
Full multimodal spectrum. Directly in C#.
Stingray eliminates the fragmented landscape of external Python servers and disparate C++ wrappers.
Language & Reasoning
Memory-mapped GGUF models running with AVX-512 SIMD kernels, paged KV caching, speculative decoding (MTP / D-Spark), continuous batching, and schema-constrained JSON grammar decoding.
Image & Video Diffusion
Diffusion pipelines in managed C#. Run FLUX.1 Schnell, Stable Diffusion 1.5/3.5, Wan Video, and HunyuanVideo with accelerated VAE decoders and Real-ESRGAN upscaling.
Neural Speech & Voice
End-to-end zero-shot TTS voice cloning and ASR transcription. Supports CosyVoice 2/3, Kokoro-82M, F5-TTS, MeloTTS, Piper, Chatterbox, OpenAI Whisper, and Silero VAD.
Vision Understanding
Unified vision pipelines supporting multimodal image QA, document extraction, and OCR.
Executes Gemma 4 Vision (gemma4v), and PaddleOCR-VL (see STATUS.md for the checked status of each).
Music & Sound FX
Generate high-fidelity audio tracks and Foley sound effects using Flow-matching DiT architectures such as MiniMax Music and Stable Audio directly within your interactive applications.
Local OpenAI Server
Host instant /v1/chat/completions and Anthropic-compatible endpoints. Drop-in replacement
for external servers with streaming SSE responses and NativeAOT compilation.
A few lines of code.
Not a labyrinth of configs.
Stingray provides an ergonomic, strongly-typed .NET API with async streaming, IDisposable
resource safety, and no reflection-heavy patterns (it builds under NativeAOT and trim analyzers).
using OpenTail.Stingray; using OpenTail.Stingray.Core.Catalog; using OpenTail.Stingray.Executors; // 1. Resolve model path from ModelHome inventory or direct GGUF: string modelPath = ModelHome.ResolveModelPath("qwen2.5-0.5b"); // 2. Memory-map model, allocate context, and initialize chat session: using var model = Model.Load(modelPath); using var context = model.CreateContext(new ContextParams { ContextSize = 4096 }); var executor = new InteractiveExecutor(context); var session = new ChatSession(executor); // 3. Stream generated tokens directly to your UI or console: await foreach (string piece in session.ChatAsync("Why write unit tests?")) { Console.Write(piece); }
Three things to make this weekend.
Each one starts from a sample in the repository that was run against real model files.
An offline tool with nothing to install
Publish your app with NativeAOT and ship one executable. The command line itself starts in about 60 ms (median 62 ms, measured 11 October 2026).
Caveats: that is start-up, not model loading. Piper voices need the ONNX Runtime native library shipped alongside. NativeAOT guide
Give your app a voice, and ears
Speak with a Piper voice and transcribe with Whisper, all on the CPU, with no cloud service in the path. On the development machine one Piper phrase ran at 0.129x real time (faster than real time).
Caveat: one phrase on one machine, not a streaming-latency guarantee. Whisper base mishears product names. Speech sample
Pull data out of private documents
Describe the record you want as a JSON schema; the output is forced to match it, and the sample checks the values against the source text. Emails, invoices and notes never leave the machine.
Caveat: the schema guarantees the shape, not the truth. A small model can fill a valid record with wrong values, which is why the sample checks. Extract sample
The catch, stated plainly
- MIT licensed. Free for commercial use, no tool-call limits.
- No API keys. Nothing to sign up for to run a model.
- No account for the starter models. They download from public Hugging Face files, pinned to an exact commit and checked against a SHA-256.
What touches the network
- Running a model does not. In the source, the network code sits in the commands you run to fetch things (
setup,pull,scout -r), behind one switch. - Set
STINGRAY_OFFLINE=1and even those commands refuse to go online. - The engine has no telemetry code. Models you download keep their own licences.
Based on reading the source for network use and on the offline switch's documented behaviour; no packet capture was done. First run is dotnet tool install -g OpenTail.Stingray.Cli, then stingray setup chat (a one-time 469 MB download; how long that takes depends on your connection), then stingray chat "hello", which works offline from then on.
Real numbers, with the dates and the gaps.
Everything here comes from the repository's own performance records, taken on one development machine: a Ryzen 7 5700G with its integrated graphics (no discrete GPU). It shows what was measured there. It says nothing about other hardware.
The same machine, one month apart
Prompt-processing speed on the Vulkan backend, about 500-token prompt, tokens per second. Older figure from 10-13 September 2026, newer from the 11 October 2026 re-run of every checkpoint (one run each).
Source: PerformanceLeague.md, "Our-side recheck, every text-generation checkpoint, 2026-10-11". The gain comes from batched quantised matrix multiplication and flash-style prefill attention on the Vulkan path. Seven CPU rows looked slower in the same re-run; a 3-run recheck the same day showed most of that was noise (details in that file).
Against llama.cpp, CPU
Pick a model. The bars show tokens per second for llama.cpp and for Stingray on the same machine, CPU only, with a roughly 500-token prompt.
This is a selection, not a random sample: these are models where Stingray's prompt processing is at or above llama.cpp's. Across all comparable rows the medians are prompt processing 0.93x and generation 0.69x of llama.cpp, so generation is the gap, and the smallest models are the furthest behind. The complete table, with the slower rows, is in PerformanceLeague.md. llama.cpp figures are from its own llama-bench (build b8585) on 10-11 September 2026; Stingray figures are from the 11 October 2026 re-run, so the ratios are only as current as the llama.cpp numbers.
Start-up of the command line
Time from process start to exit for stingray --help, median of 9 runs, 11 October 2026. This is the CLI starting, not a model loading and not time to first token.
NativeAOT executable: 27.4 MiB. The same CLI as a normal .NET build needs the .NET 10 runtime installed. Windows only; the server host and other platforms were not measured. Source: docs/guides/native-aot-deployment.md.
The honest list.
Measured on an integrated GPU only
CUDA and discrete-GPU paths exist but were not measured on this machine, so no discrete-GPU speed is claimed anywhere on this page.
SafeTensors language models are narrow
Only a few dense families, on the CPU, in F32, F16 or BF16. For quantised weights or a GPU, use a GGUF. stingray capabilities lists the exclusions.
Point at the weight blob, not the manifest
Ollama's weight blobs are GGUF files and run directly. Pointing the CLI at Ollama's manifest file does not work yet.
"Admitted" is not "verified everywhere"
Each family carries a verification tier, a backend list and a date in STATUS.md, and some families are marked as regressed. Read the row before you depend on one.
Image and video set-up is multi-file
Each model needs a diffusion model, a text encoder and a VAE, so there is no one-line call. Several video models are experimental.
Models keep their own licences
Stingray is MIT licensed and ships no weights. Each model you download comes with its own licence terms.
How Stingray works underneath.
Four modular layers designed for uncompromising efficiency, testability, and AOT compilation.
Core Abstractions
Memory-mapped GGUF & SafeTensors parsers, BPE/SentencePiece tokenizers, Jinja templating, and grammar-constrained JSON schema decoders.
Compute Backends
AVX2/AVX-512 vector SIMD math kernels (Q4_K/Q6_K/Q8/IQ dequantization), Vulkan compute shaders (SPIR-V pipeline cache), and cuBLAS CUDA GEMM pools.
Execution Engine
Paged KV cache management, hybrid forward pass scheduling, speculative decoding (MTP / D-Spark), token sampling, and continuous batching.
Domain Pipelines
Specialized multimodal runtimes: Audio (CosyVoice/Kokoro/Whisper), Diffusion (FLUX/SD3), Vision (UnifiedVision), and the CLI / Server hosts.
Straight answers.
No marketing doublespeak — the same technical honesty we maintain across all OpenTail projects.
Is there any cost, subscription, or license fee?
None. OpenTail.Stingray is 100% free and open-source under the MIT license. You can use it in commercial applications, internal enterprise tools, or hobby projects with zero royalties and no tool-call limits. Inference runs in your process; only stingray setup and stingray pull download anything.
Do I need Python, PyTorch, or llama.cpp installed?
No. Stingray is written in managed C# (.NET 10). It parses GGUF and SafeTensors files directly and runs inference using its own AVX2/AVX-512 SIMD kernels, Vulkan compute shaders, or CUDA. The only native piece is your graphics driver (or ONNX Runtime if using ONNX-based speech engines like Piper).
Can I run models without a discrete GPU?
Yes. The CPU backend uses AVX2 and AVX-512 SIMD kernels. Furthermore, on systems with integrated graphics (such as AMD Ryzen APUs or Intel Iris), Stingray automatically dispatches compute shaders over Vulkan with shared system memory.
Is it compatible with NativeAOT single-binary publishing?
Yes. Stingray adheres to strict trimming and NativeAOT rules: no reflection-heavy patterns, source-generated JSON serializers, and zero dynamic code emission. You can publish your complete application and AI runtime as a single standalone executable.
Where do I get models?
You can use the built-in CLI: stingray setup chat automatically pulls verified, checksum-checked models into your local store. You can also pull any GGUF from Hugging Face with stingray pull -r <repo> or inspect compatibility with stingray scout.
Ready to build with Stingray?
Choose how you want to engage — whether via terminal CLI, embedding the NuGet package, or exploring the code.
Stingray CLI
Install the global tool to chat immediately, pull verified models, and run vision or image generation from your terminal.
In-Process Library
Embed LLMs, diffusion, vision, and speech directly into your .NET 10 console apps, desktop tools, ASP.NET backends, or MAUI apps.
GitHub & Recipes
Browse the samples: chat, structured JSON invoice extraction, speech in and out, and image generation.