Private browser workspace
Use the embedded chat interface for persistent local conversations, smart context windows, model switching, branching, file attachments, and export.
See the server UIGopherLLM is a compact GGUF runtime written in Go. Run language and embedding models locally, expose familiar APIs, or embed inference directly into your own Go application.
MIT licensed. No Python runtime. Local by default; remote features remain opt-in.
# Build the CLI
git clone https://github.com/SimonWaldherr/GopherLLM
cd GopherLLM
make build
# Discover local GGUF models
bin/gopherllm --model-dir /path/to/models --list-models
# Start the API and private chat UI
bin/gopherllm --model-dir /path/to/models \
--model "model-name-or-file-fragment" \
--serve 127.0.0.1:8080 --chat
Built for local work
One runtime covers model loading, generation, embeddings, model inspection, chat, tools, and production-compatible HTTP endpoints.
Use the embedded chat interface for persistent local conversations, smart context windows, model switching, branching, file attachments, and export.
See the server UIMemory-mapped weights, zero-copy quantized tensors, split GGUF discovery, and parallel page warm-up keep startup predictable.
OpenAI-compatible and Ollama-compatible routes make existing clients easy to connect, while native endpoints expose GopherLLM features directly.
AVX2, FMA, ARM64 NEON, and optional Metal kernels accelerate the same portable Go inference graph.
Build agentic workflows with function calling, local skills, Wikipedia and Wikidata research, embeddings, and browser-side RAG over saved conversations.
Explore agent featuresBroad model coverage
GopherLLM validates each architecture and tensor layout instead of treating unknown files as generic Llama models.
Qwen 3.5–3.8 hybrid GGUFs are currently experimental, text-only paths.
Connect your stack
Keep the client you already use, generate local vectors, or call the runtime directly.
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "local",
"messages": [
{"role": "user", "content": "Explain mmap in one sentence."}
],
"stream": true
}'
curl http://127.0.0.1:8080/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "local",
"messages": [
{"role": "user", "content": "Explain mmap in one sentence."}
]
}'
curl http://127.0.0.1:8080/v1/embeddings \
-H "Content-Type: application/json" \
-d '{
"model": "local",
"input": [
"semantic search query",
"document to compare"
]
}'
ctx := context.Background()
model, err := gopherllm.Open(ctx, "model.gguf")
if err != nil {
log.Fatal(err)
}
defer model.Close()
result, err := model.Generate(ctx,
"Explain mmap in one sentence.",
gopherllm.WithMaxTokens(80),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text)
Performance without guesswork
For generation models, Auto Mode measures thread counts, activation paths, KV-cache formats, and prefill chunks on the machine you actually use. Results are cached and applied on the next run.
Read about auto modeWeights stay backed by the GGUF file and quantized tensors borrow mapped memory directly.
Dedicated BERT, Nomic-BERT, and Granite embedding paths keep long local documents moving efficiently.
Optional f16 key-value storage reduces memory pressure while optimized kernels preserve throughput.
Architecture-specific assembly and Metal paths sit behind the same Go API and test suite.
Run local by default
Build the binary, point it at your model directory, and choose the interface that fits your application.