blazr

App Listed

Inference server for LLMs, speech and embeddings: OpenAI-compatible routes with streaming, plus speech synthesis (TTS) and transcription (ASR). Serves Llama, Mistral, Qwen, Mamba2, MLA+MoE and hybrid models from SafeTensors, AWQ, GPTQ and GGUF.

Downloads
8
Dependents
Not applicable
Stars
7
Forks
0
Contributors
1
Commits
284
Latest release
0.7.1 ·

About

From the project README ·

OpenAI-compatible inference server in Rust for LLMs, speech, and embeddings.

Runs and serves SafeTensors, AWQ, GPTQ, and GGUF models. Also a Rust library.

Docs · Crate · Hardware · Models · API · Quick Start · Contributing

blazr is an LLM inference server in Rust. It runs text, speech, and embedding models from one binary. You use it over HTTP with OpenAI, Anthropic Messages, and Ollama routes, or from the command line. It is also a Rust library, so an app can embed the engine. See Use as a library.

  • Language: the server, scheduler, and sampling are Rust. Python is not needed to build or run it.
  • Built on: boostr supplies model architectures and quantization kernels. numr supplies tensors and the CPU, CUDA, and WebGPU backends.
  • Runs models trained with oxidizr and files made by compressr.
  • Not supported yet: DeepSeek-V2/V3 (refused at load), InternLM2 (load fails), and Mamba2 and Mamba3 checkpoints (in code, untested). CI runs no GPU test.

See docs/architecture.md.

Read the full README

What works

HardwareGet it fromNeeds
CPUThe Linux x86_64, Linux aarch64, or Windows x86_64 CPU archive, or the default buildNothing
NVIDIA through CUDASource build with --features cuda. No archive includes itCUDA toolkit 12.8 or newer (13.x works), nvcc on PATH, compute capability 7.5 (Turing) or newer
Linux GPU through Vulkanblazr-linux-x64-gpu.tar.gz, or --features wgpuVulkan driver
Windows GPU through DX12blazr-windows-x64-gpu.zip, or --features wgpuDX12 driver
Apple silicon through Metalblazr-macos-arm64.tar.gz, or --features wgpumacOS

CI runs no GPU test. It compile-checks wgpu and does not build cuda.

CapabilityWhat you get
FormatsSafeTensors (F16, BF16), AWQ INT4, GPTQ INT4, and GGUF quantizations
ModelsSee Supported Models
DetectionArchitecture, format, and tokenizer from checkpoint tensor names
HTTP APIsOpenAI-compatible, Anthropic Messages, and Ollama routes. See API Reference
StreamingServer-Sent Events for token-by-token output
Downloadsblazr pull from the Hugging Face Hub
OperationsAPI-key auth, native TLS, Prometheus /metrics, request timeout, graceful shutdown on SIGTERM
SpeechKokoro, VoxCPM2, and VITS synthesis, and Whisper with word timestamps. Needs audio
C libraryStatic and shared library. Needs capi
Tokenizersplintr BPE, detected from the model. blazr extracts a GGUF file's embedded tokenizer. See docs/models.md

Quick Start

Install a prebuilt archive
ArchivePlatformGPUNeeds
blazr-linux-x64.tar.gzLinux x86_64Noneglibc 2.35 or newer
blazr-linux-x64-gpu.tar.gzLinux x86_64Vulkanglibc 2.35 or newer
blazr-linux-arm64.tar.gzLinux aarch64Noneglibc 2.39 or newer
blazr-macos-arm64.tar.gzmacOS on Apple siliconMetalNothing
blazr-windows-x64.zipWindows x86_64NoneNothing
blazr-windows-x64-gpu.zipWindows x86_64DX12Nothing
  • Every archive above includes the audio feature.
  • Android and iOS archives hold libblazr.a. See C library.
  • Archive names carry no version, so the latest release keeps the same URL.
  • docs/deployment.md lists every archive.
curl -LO https://github.com/ml-rust/blazr/releases/latest/download/blazr-linux-x64.tar.gz
curl -LO https://github.com/ml-rust/blazr/releases/latest/download/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
tar xzf blazr-linux-x64.tar.gz
./blazr --help

On macOS, use shasum -a 256 --check --ignore-missing SHA256SUMS. docs/deployment.md has the Windows steps.

Install with cargo

Needs Rust 1.95 or newer.

cargo install blazr --locked --features audio          # CPU
cargo install blazr --locked --features audio,cuda     # NVIDIA CUDA
Run a model

blazr run, generate, chat, and bench take a model path. They never fetch a model. blazr pull downloads one first.

blazr pull Qwen/Qwen2.5-0.5B      # writes ./models/Qwen2.5-0.5B
blazr generate --model ./models/Qwen2.5-0.5B --prompt "Once upon a time" --max-tokens 100
blazr run ./models/Qwen2.5-0.5B   # interactive REPL

blazr pull writes to --output, then BLAZR_MODEL_DIR, then the model_dir config key, then ./models.

Start the server

blazr serve --model takes a path, or a name that blazr list shows.

blazr serve --model Qwen2.5-0.5B --port 8080
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [{"role": "user", "content": "Hello!"}],
    "max_tokens": 100,
    "stream": true
  }'
  • blazr serve does not download LLM weights. Run blazr pull first.
  • blazr serve fetches only Kokoro's G2P files, on first use.
  • Without --model, the server loads the default_model key when set. Otherwise it starts with no model.
  • Requests load the named model on first use. See docs/deployment.md.
Build from source
BuildCommand
CPUcargo build --release
CPU with speechcargo build --release --features audio
NVIDIA CUDAcargo build --release --features cuda
WebGPUcargo build --release --features wgpu
Multi-nodecargo build --release --features distributed
Multi-GPU tensor parallelismcargo build --release --features cuda,nccl
  • Backends: cuda takes priority over wgpu when both are on.
  • Devices: the device config key takes cpu, cuda, cuda:N, wgpu, and wgpu:N. --cpu forces the CPU where a command offers it.
  • CUDA binaries: set NUMR_CUDA_ARCH=all for a binary that runs on another machine.
  • Tensor parallelism: needs NCCL. A degree above 1 fails in any other build. It is tested on one GPU only. See docs/tuning.md.
  • Library use: --no-default-features builds the engine with no CLI or HTTP stack. The blazr binary needs the default cli and server.
  • Commands by feature: docs/architecture.md.

Supported Models

FamilyStatusTested formatsEvidence
Llama 3.xTestedSafeTensorsMatches transformers
Mistral 7BTestedSafeTensors, AWQ, GPTQ, GGUFProduction checklist names it. CPU runs of GGUF, AWQ, and GPTQ give coherent text. No reference
Qwen2/2.5, Phi-3.5, Gemma 2, StarCoder2, GPT-NeoX/Pythia, Falcon-RW, MixtralTestedSafeTensors32 of 32 greedy ids match transformers
Qwen2-MoE, DBRX, Command-R (Cohere)Tested on tiny random-weight files onlySafeTensors32 of 32 ids and the logits match transformers
Qwen3.5 hybridTestedGGUFA repo test generates from a GGUF file
oxidizr MLA, MLA+MoE, Mamba2 + MLA+MoE hybridsTested on tiny seeded checkpoints onlySafeTensorsGenerates through the loader
Mamba2, Mamba3In code, untestedNoneNo test names a checkpoint
Llama AWQ, GPTQ, and GGUF files, and Yi, CodeLlama, SolarIn code, untestedNoneNo test names a checkpoint
Phi-2, and AWQ, GPTQ, or GGUF files of the other families aboveRoutes to the Llama path, untestedNoneNo test covers the route
DeepSeek-V2/V3Refused at loadNoneNo DeepSeek model implementation
InternLM2Load failsNoneNo tensor name map

The Evidence column covers the forward pass on a raw prompt. It says nothing about chat. tests/chat_stop_reference.rs checks chat prompt ids and stop ids against transformers for Qwen2.5, Qwen3, Gemma 2, and Phi-3.5, and one real Qwen3 turn that ends on <|im_end|>.

A base checkpoint is not a chat model. Qwen2.5-0.5B and gemma-2-2b never learned their turn markers. Through /v1/chat/completions they run past the first sentence and print control text where a marker belongs, and transformers prints the same kind of control text from the same prompt. Use an -Instruct, -it, or chat checkpoint for chat.

docs/models.md holds the full matrix, with an evidence level per cell.

Model Formats

blazr detects the format from checkpoint contents.

model_dir/                         # SafeTensors (HuggingFace)
├── model.safetensors              # or sharded: model-00001-of-00002.safetensors
├── config.json                    # HuggingFace model config
└── tokenizer_config.json          # Chat template (optional)

checkpoint_dir/                    # SafeTensors (oxidizr)
├── model.safetensors
└── config.json                    # oxidizr config (optional, inferred from tensors)

model.gguf                         # GGUF: weights, tokenizer, and config in one file

GGUF quantization formats run from Q2_K through Q8_0, plus the IQ and TQ series. docs/models.md lists the CPU and CUDA kernel for each format.

GGUF files load through mmap on every target except wasm32. A failed map falls back to file reads.

API Reference

This table lists the main routes. docs/api.md lists every route, with its request fields, responses, and errors.

MethodPathDescription
GET/healthHealth check
GET/v1/modelsList available models
POST/v1/completionsText completion
POST/v1/chat/completionsChat completion
POST/v1/embeddingsEmbeddings
POST/v1/responsesOpenAI Responses API
POST/v1/messagesAnthropic Messages API
POST/v1/infillFill-in-the-middle
POST/v1/rerankRerank documents
POST/v1/systemoneDecision model questions
POST/tokenize, /detokenizeTokenizer round trip
POST/v1/audio/speechText to speech (audio)
POST/v1/audio/transcriptionsSpeech to text, with word timestamps (audio)
POST/v1/audio/translationsSpeech to English text (audio)
GET/v1/audio/voicesA TTS model's voices (audio)
POST/api/chat, /api/generateOllama chat and prompt completion, NDJSON streams
POST/api/embed, /api/embeddingsOllama embeddings
GET/api/tags, /api/psOllama-compatible model listing
GET/metricsPrometheus metrics
APIStream format
OpenAIdata: {...} chunks, ending with data: [DONE]
AnthropicNamed event: lines, each followed by a data: {...} chunk. No [DONE]
OllamaOne JSON object per line

CLI Reference

CommandPurpose
blazr runInteractive generation (REPL)
blazr generateGenerate text from a prompt
blazr chatInteractive multi-turn chat
blazr serveStart the inference server
blazr infoDisplay model architecture and config
blazr listList available local models
blazr pullDownload a model from the Hugging Face Hub
blazr benchMeasure prefill and decode throughput
blazr psShow the models a running server holds
blazr convertConvert a model. Needs compressr on PATH
blazr completionsPrint shell completions
blazr speakNarration from a script (audio)
blazr transcribeWord timings from a Whisper model (audio)
blazr sound-reviewReview rendered sound effects (audio)
blazr decisionDecision model tools, such as calibrate
blazr swarmJoin or start a distributed inference swarm (distributed)
blazr disaggRun prefill and decode disaggregation (distributed)

Run blazr <command> --help for every flag. docs/configuration.md documents the flags, the config file, and the environment variables.

Chat Templates and Images

Chat routes render messages with the model's own Jinja template. --chat-template replaces it with a built-in name (chatml, llama3, mistral, phi3, gemma, deepseek, generic) or a template file. See docs/models.md.

With --mmproj, the chat, responses, and messages routes accept images beside text. Without it, an image request gets a 400 that names the flag. See docs/api.md.

Speech

Build with --features audio, or use a desktop archive. The feature adds /v1/audio/* routes to blazr serve and three commands.

CommandPurpose
blazr speakTurns a script into a voiceover WAV. Whisper hears each phrase back and reports any mismatch.
blazr transcribeWrites word timings from a local Whisper model, one words file per narration.
blazr sound-reviewReviews rendered sound effects, then ranks each against its text with CLAP. --no-model skips the ranking.

The commands write reports to standard output and logs to standard error.

Exit codeMeaning
0Done: every phrase heard as written, every narration read, every sound passed
1A mismatch remains, or the run failed
2A bad input: a missing file, a flag out of range, a bad manifest
3speak --model names a model blazr does not run. The caller runs that model elsewhere

A command fetches a missing model from the Hugging Face Hub on first use. docs/models.md holds the model list, search path, and device rules.

Use as a library

The engine builds without the CLI and the HTTP stack:

[dependencies]
blazr = { version = "0.7", default-features = false, features = ["f16"] }

Scheduler loads models from a directory on first use. Executor::generate streams tokens and stops when you drop the stream. This example needs anyhow, futures, and an async runtime such as tokio.

use std::pin::pin;

use blazr::boostr::{CpuDevice, CpuRuntime};
use blazr::tokenizer::Tokenize;
use blazr::{GenerationConfig, Scheduler};
use futures::StreamExt;

async fn complete(on_token: impl Fn(&str)) -> anyhow::Result<()> {
    let scheduler = Scheduler::<CpuRuntime>::new("./models".into(), CpuDevice::new());
    let executor = scheduler.get_executor("llama-3.2-1b").await?;
    let prompt = executor.tokenizer().encode("The capital of France is");
    let config = GenerationConfig {
        max_tokens: 64,
        ..Default::default()
    };
    let mut tokens = pin!(executor.generate(&prompt, &config));
    while let Some(token) = tokens.next().await {
        on_token(&token?.text);
    }
    Ok(())
}

docs.rs/blazr documents the API.

C library

The capi feature builds a C library for app embedders.

cargo build --release --lib --no-default-features --features capi,f16
  • Output: libblazr.a and libblazr.so in target/release/.
  • Header: include/blazr.h.
  • Status: every call returns a BlazrStatus. Zero and above mean success.
  • Bindings: blazr ships no Kotlin or Swift bindings. Call the C functions through JNI or a bridging header.
  • Functions and link steps: examples/capi/README.md. examples/capi/smoke.c calls every step.
TargetCompile checkRun
Android aarch64-linux-androidPasses on NDK 27x86_64 emulator passes. Not run on aarch64 hardware
iOS aarch64-apple-ios, aarch64-apple-ios-simCI checks bothNot stated
WebAssembly wasm32-unknown-unknown, wgpu featurePassesNot run in a browser

Decision models

blazr serves System One decision models on POST /v1/systemone. A decision model answers typed questions about one state. It returns probabilities and does not generate text.

FamilyModelWeights
jebadiahJebadiahSafeTensors or GGUF
deciderMapika deciderSafeTensors or GGUF
kevKev: LoRA adapter and pointer head, served on its baseAdapter directory, plus a base model
clefClef-Flash: full checkpoint and joint-schema head, text onlySafeTensors checkpoint with the head beside it
BLAZR_MODEL_DIR=/path/to/models blazr serve --model decider-4b --port 8080

Limits:

  • Clef-Flash memory: the text backbone takes 16.7 GiB in BF16. It does not fit a 12 GB GPU.
  • CUDA: Kev and Clef are not tested on it.
  • Clef 27B: not tested and not claimed.
  • Other families: not served.

docs/decision-models.md has run commands, family detection, calibration, and the tested matrix.

Documentation

DocContent
docs/api.mdEvery HTTP endpoint, request field, and error
docs/configuration.mdConfig file, CLI flags, environment variables
docs/deployment.mdInstall, systemd, Docker, reverse proxy, TLS, metrics
docs/models.mdArchitecture, format, and quantization matrix
docs/decision-models.mdSystem One decision models: families, run, limits
docs/tuning.mdBatching, caching, parallelism knobs
docs/architecture.mdLayers, request path, modules, features, commands
examples/capi/README.mdC library: functions, link steps, target checks

Related Projects

  • boostr: ML framework, model architectures, quantization
  • numr: tensors, linear algebra, CPU and GPU backends
  • voxr: audio and speech pipelines behind audio
  • oxidizr: training framework for hybrid architectures
  • splintr: BPE tokenizer
  • compressr: model conversion and compression

Contributing

Contributions are welcome. See CONTRIBUTING.md for conventions and checks.

Questions and design discussion happen on Discord.

License

Licensed under Apache-2.0. See LICENSE.

Built with Llama.

blazr embeds the Llama 3 tokenizer vocabulary through splintr. That vocabulary is under the Llama 3.1 Community License.

Llama 3.1 is licensed under the Llama 3.1 Community License, Copyright © Meta Platforms, Inc. All Rights Reserved.

Each release archive carries that licence as LICENSE-LLAMA, and the licence of every compiled-in crate in THIRD-PARTY-LICENSES.txt.

Runs on
CUDA, WebGPU
What shows it
  • CUDA: blazr feature cuda
  • WebGPU: blazr feature wgpu
Native code
Optional
  • Binds native code: ring (feature distributed)
Python bindings
No Python binding crate found
License
Apache-2.0

Compare with similar projects

Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days.

blazr beside the projects that share a topic with it
ProjectDownloadsDependentsStarsLatest releaseRuns on (GPU)Native codeLicense
blazr This page App Listed

Inference server for LLMs, speech and embeddings: OpenAI-compatible routes with streaming, plus speech synthesis (TTS) and transcription (ASR). Serves Llama, Mistral, Qwen, Mamba2, MLA+MoE and hybrid models from SafeTensors, AWQ, GPTQ and GGUF.

8 binary downloads per release Not applicable 7 0.7.1 CUDA, WebGPU Binds native code: ring (feature distributed) Apache-2.0
musicgpt App Listed Dormant

Generate music based on natural language prompts using LLMs running locally

Also in Run and serve models.

7,531 binary downloads per release Not applicable 1,471 0.3.27 CUDA Binds native code: alsa-sys, openssl-sys, ort-sys MIT
shimmy App Listed

Lightweight Ollama-compatible inference server with native SafeTensors support. No Python dependencies, cross-platform WebGPU acceleration via Airframe.

Also in Build LLM apps and agents.

352 binary downloads per release Not applicable 6,014 2.6.6 GPU support unknown Binds native code: sys-info Apache-2.0
candle-vllm App Listed

Efficent platform for inference and serving local LLMs including an OpenAI compatible API server.

Also in Build LLM apps and agents.

138 binary downloads per release Not applicable 739 Not measured Not measured MIT
lele Listed

Bare-metal machine learning inference library in Rust

Also in Run and serve models.

132 downloads over 30 days 1 183 0.2.0 GPU support unknown No native code found MIT

Fast, unified, Rust-native, Axum-compatible inference endpoints and nervous system for tensor models and LLMs: KServe / Triton and OpenAI APIs from one pure-Rust server

Also in Build LLM apps and agents.

241 downloads over 30 days 0 66 0.16.2 CUDA, WebGPU, Metal No native code found MIT
Why ListedNo archive, New or Featured rule places it, so it is Listed.

What it lacks for Featured

  • The check holds no value for Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days. A gate that lacks its signal does not pass.

What else the check found

  • The last activity is on 6 Nov 2026, 3 days ago. The rules expect an update within 365 days. Dormancy rule

Not measured: Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days.

Exact rules: Listed, Featured app. The check on applied thresholds version 9.

Every rule outcome, as the check records it
  • expected-interval: app: E = 365 days
  • dormancy: last activity 2026-11-06, 3 days ago, E = 365: active
  • featured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90d
  • listed: listed: no archive, new or featured rule applies

Measurements and sources

Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.

Sources6 sources
Adoption8 binary downloads per release4 not measured
Adoption measurements
SignalValueSourceFetchedCounts
Active dependentsNot measuredYes
New dependents (365 days)Not measuredYes
Peak active dependentsNot measuredYes
Active dependents as a share of the peakNot measuredYes
Binary downloads per release8GitHub releasesYes
MaintenanceLatest human commit: 3 days ago4 not measured
Maintenance measurements
SignalValueSourceFetchedCounts
Latest human commit2026-11-06GitHub repositoryYes
Latest release2026-11-06GitHub releasesYes
First release2025-12-05crates.io database dumpYes
Latest version0.7.1crates.io database dumpNo
Days the oldest outside issue waits for a reply0GitHub repositoryYes
Maintainer replies over 365 days1GitHub repositoryYes
Repository archivedfalseGitHub repositoryYes
Repository gonefalseGitHub repositoryYes
Release commit or manifest in the repotruecrates.io packageNo
Published docsNot measuredYes
Latest release fails cargo checkNot measuredYes
Build check dateNot measuredYes
Build check toolchainNot measuredYes
SecurityNot measured
Security measurements
SignalValueSourceFetchedCounts
Unpatched vulnerabilities past the grace windowNot measuredYes
RustSec unmaintained advisoryNot measuredYes
Deprecation noticeNot measuredYes
Deprecated requirementNot measuredYes
Distribution12 releases, 129 downloads over 30 days6 not measured
Distribution measurements
SignalValueSourceFetchedCounts
Releases12crates.io database dumpNo
Downloads over 30 days129crates.io database dumpNo
Binary downloads over the last 3 releases25GitHub releasesYes
Homebrew installs on request over 365 daysNot measuredYes
Repology repository familiesNot measuredYes
Docker pull growth over 90 daysNot measuredYes
Docker pulls at the growth baselineNot measuredYes
Every version a prereleasefalsecrates.io database dumpYes
Every version 0.0.xfalsecrates.io database dumpYes
Every version yankedNot measuredYes
Crate deleted from crates.ioNot measuredYes
Repository7 stars, 0 forks, 1 contributors, 284 commits. Stars alone never qualify a project.
Repository measurements
SignalValueSourceFetchedCounts
GitHub stars7GitHub repositoryYes — one part of the repository route
GitHub forks0GitHub repositoryYes — one part of the repository route
Contributors with a GitHub account1GitHub contributorsYes — one part of the repository route
Commits on the default branch284GitHub repositoryNo
Repository's main crate left out of the entrynonecrates.io database dumpYes
Facts that never count
Facts that never count measurements
SignalValueSourceFetchedCounts
LicenseApache-2.0crates.io database dumpNo
Runs on, from listed crates and their direct dependenciesCUDA, WebGPUcrates.io database dumpNo
What shows each backendCUDA: blazr feature cuda; WebGPU: blazr feature wgpucrates.io database dumpNo
Native code, from listed crates and their dependenciesBinds native code: ring (feature distributed)crates.io database dumpNo
Python bindings, from direct dependencies of listed cratesNo Python binding crate foundcrates.io database dumpNo
Crates that depend on a listed crate directlyNot measuredNo

Corrections and review history

Report a correction

No correction applies to this entry.

Judgments

A judgment enters only through an approved issue and a merged pull request.

No judgment applies to this entry.