Mullama vs Llamafu vs ZigLLM: the cognisoc family in 2026
cognisoc is the open-source team behind local-llm.net. The three public runtimes are Mullama (desktop / server, production), Llamafu (mobile, production), and ZigLLM (educational). This page compares them and helps you pick which one to use.
Overview
| Mullama | Llamafu | ZigLLM | |
|---|---|---|---|
| Language | Rust + 5 native bindings | Dart (Flutter) | Zig |
| Target surface | desktop, server, embedded apps | Android, iOS | educational, research |
| First release | 2025-08 | 2025-08 | 2025-09 |
| Stars (Jun 2026) | 1 | 2 | 6 |
| Maturity | v1.x stable | v1.x mobile | educational |
| Foundation | llama.cpp (Rust bindings) | llama.cpp (FFI) | from-scratch in Zig |
| Model format | GGUF | GGUF | GGUF (loader) + own tensors |
| Native bindings | 6 (Rust, Python, Node, Go, PHP, C) | 1 (Dart) | 0 |
| OpenAI API | ✓ | ✗ (local API in v2) | ✗ |
| Anthropic API | ✓ | ✗ | ✗ |
| Vision | ✓ | ✓ | partial (LLM only) |
| Audio | ✓ | ✗ | ✗ |
| Production-ready | ✓ | ✓ (mobile) | ✗ |
| License | MIT | MIT | MIT |
| Website | mullama.cognisoc.com | llamafu.cognisoc.com | zigllm.cognisoc.com |
| GitHub | cognisoc/mullama | cognisoc/llamafu | cognisoc/zigllm |
When to use each
Choose Mullama when…
- You are deploying a desktop or server LLM and want a Rust-first runtime.
- You need native bindings for 6 languages (Rust, Python, Node, Go, PHP, C).
- You want a drop-in Ollama replacement (same CLI, same Modelfile, same port 11434).
- You need OpenAI + Anthropic compatible HTTP APIs.
- You are building an embedded desktop app (Tauri, Electron, etc.) and want the engine in-process.
Choose Llamafu when…
- You are building a mobile app in Flutter (or native Android / iOS).
- You need on-device inference with no cloud, no API calls, no data leaving the device.
- You want function calling, vision, structured JSON in a Flutter package.
- You are okay with the mobile platform’s constraints (1B-7B models, Q4 quantization).
Choose ZigLLM when…
- You want to learn how LLMs work by reading the source.
- You are a researcher implementing a new architecture and want a clean, readable reference.
- You are teaching a course on transformer internals and need a well-commented codebase.
- You want a Zig ML library that you can adapt to your own work.
- Do not use it for production inference. Use llama.cpp or Mullama for that.
Architecture comparison
| Mullama | Llamafu | ZigLLM | |
|---|---|---|---|
| Memory model | Rust ownership | Dart FFI + manual | manual (Zig) |
| GPU offload | ✓ (CUDA, Metal, ROCm, Vulkan, OpenCL, SYCL, RPC) | ✓ (Metal, OpenCL, Vulkan) | ✗ (CPU only) |
| Quantization | all GGUF formats | all GGUF formats | reads GGUF, owns quantization |
| Threading | Rust async | Dart isolates + FFI threads | Zig threads |
| Streaming | ✓ | ✓ | ✓ |
| Hot-reload models | ✓ | ✓ (mobile pattern) | ✗ |
How they share work
All three sit on top of (or alongside) the GGUF model format. A model file you download for Mullama will work in Llamafu and (with limits) in ZigLLM. This means:
- You can prototype in ZigLLM to understand the math.
- Run the same model in Llamafu on a phone.
- Serve the same model with Mullama on a server.
- All three consume the same GGUF files, no conversion needed.
Performance
Tokens per second, Llama 3.2 1B Q4_K_M, single thread for parity:
| Runtime | Linux x86 | macOS M2 | Android Pixel 8 |
|---|---|---|---|
| Mullama | 45 | 38 | n/a |
| Llamafu | n/a | 32 | 11 |
| ZigLLM (educational) | 12 | 10 | n/a |
Mullama and Llamafu are both production-grade. ZigLLM is 3-4× slower because it is a from-scratch implementation without the optimization layers of llama.cpp.
Code comparison
Mullama (Rust)
use mullama::{Model, Context, ContextParams};
let model = Model::load("llama3.2-1b.gguf")?;
let mut ctx = Context::new(&model, ContextParams::default())?;
let response = ctx.generate("Hello, AI!", 256)?;
Llamafu (Dart)
final llamafu = await Llamafu.init(
modelPath: '/path/to/llama-3.2-1b-q4_k_m.gguf',
threads: 4,
);
final result = await llamafu.complete(
prompt: 'Hello, AI!',
maxTokens: 256,
);
ZigLLM (Zig)
const llama = @import("llama");
const model = try llama.Model.load("llama3.2-1b.gguf");
const ctx = try model.context(.{});
const response = try ctx.generate("Hello, AI!", 256);
Decision matrix
| Your situation | Use |
|---|---|
| Server / desktop production | Mullama |
| Multi-language app (Python + Rust + Node) | Mullama |
| Flutter mobile app | Llamafu |
| Native iOS / Android | Llamafu (FFI) or MLC LLM |
| Need OpenAI / Anthropic API | Mullama |
| Vision on mobile | Llamafu (LLaVA, Qwen2-VL) |
| Voice assistant on desktop | Mullama (built-in audio) |
| Teaching / research | ZigLLM |
| Building a new architecture prototype | ZigLLM |
| Want to read the source to learn | ZigLLM |
| Embedded desktop (Tauri / Electron) | Mullama |
| Web app (WebGPU) | MLC LLM, not any of these three |
See also
- Mullama tool page — full feature list
- Llamafu tool page — full feature list
- ZigLLM tool page — full feature list
- cognisoc product family overview — the broader portfolio
- Llamafu vs MLC LLM — mobile-specific
- Mullama vs Ollama vs llama.cpp — desktop-specific