gguf-server
Local LLM server GUI for GGUF models, packaged for Python. The GUI runs in
your browser against a local backend; inference is served by the standalone
gguf-server C/C++ engine, compiled during pip install and bundled with the
package as a single binary. Model and template files are referenced by
filesystem path through a built-in file browser — nothing is uploaded or
copied to temp storage.
Install
pip install gguf-server
Building the bundled engine requires a C/C++ toolchain and CMake ≥ 3.15 (on
Windows: MSVC Build Tools). The engine source is resolved from the vendored
vendor/server copy (see scripts/vendor_engine.py), a sibling ../server
checkout, or GGUF_SERVER_ENGINE_DIR. That tree is self-contained — it carries
its own ggml kernels, GGUF runtime, common layer and HTTP server, with no
llama.cpp checkout and no external ggml — so the build compiles the server
binary and nothing else.
GPU and accelerator backends
The default build is CPU-only. Backends are opt-in and can be requested with
an environment variable or a CMake define — the env var is usually easier to
pass through pip:
GGUF_SERVER_CUDA=1 pip install gguf-server # NVIDIA (needs the CUDA toolkit)
GGUF_SERVER_HIP=1 pip install gguf-server # AMD (needs ROCm/HIP)
GGUF_SERVER_VULKAN=1 pip install gguf-server # cross-vendor (needs the Vulkan SDK)
CMAKE_ARGS="-DGGUF_SERVER_CUDA=ON" pip install gguf-server # equivalent
Available: CUDA, HIP, VULKAN, METAL. These are the kernels the engine
tree actually ships (vendor/server/kernels/src); the backends llama.cpp has
and this engine does not — SYCL, CANN, OpenCL, WebGPU, RPC, zDNN, ZenDNN,
OpenVINO, Hexagon, MUSA, BLAS — are simply absent. Each option maps to the
ggml option of the same name, and the finer-grained GGML_* knobs
(GGML_NATIVE, GGML_AVX512, GGML_CUDA_FA_ALL_QUANTS, …) can still be
passed straight through as -DGGML_<NAME>=…. On macOS, Metal is on by
default (with the shader library embedded in the binary) — no flag needed.
CUDA builds compile kernels for many GPU architectures and can take a long
time; restrict them to your own card to speed this up, e.g.
CMAKE_ARGS="-DGGUF_SERVER_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=89". The GPU
runtime libraries (cuBLAS, ROCm, …) are linked dynamically and come from the
toolkit you built against, so keep it installed.
HTTPS / OpenSSL
Off by default here (the engine's own default is on). OpenSSL is only needed to
download models over HTTPS (-hf / URL arguments); this package always hands
the engine local file paths. Leaving it off also avoids a build break on
Windows: find_package(OpenSSL) can pick up a foreign-ABI install — an
MSYS2/MinGW libcrypto alongside an MSVC toolchain puts MinGW headers on
cl.exe's include path and fails httplib.cpp, download.cpp and
hf-cache.cpp with winnt.h: fatal error C1189: No supported target architecture. Re-enable with GGUF_SERVER_OPENSSL=1 if you want in-server
HTTPS downloads.
Embedded web UI
The engine embeds whatever static assets sit in GGUF_SERVER_UI_DIR (default
vendor/server/ui/dist, which ships empty), so out of the box it is API-only
and its own / returns 404. That has no effect here — this package serves its
own GUI. Point GGUF_SERVER_UI_DIR at a bundle if you want the engine's UI as
well.
Windows notes
Both toolchains work; which one you get depends on your shell, so check the
CMAKE_CXX_COMPILER line in the configure output if a build misbehaves.
- MSVC — build from a Developer Command Prompt (
vcvars64.bat) socl.exeis on PATH. This is the primary Windows toolchain. - MinGW / MSYS2 — used automatically when
C:\msys64\mingw64\binis on PATH and MSVC is not. Supported here: the build defines_WIN32_WINNT=0x0A00(MinGW otherwise pins it to a Windows 7-era value, which makes the vendored cpp-httplib hard-error with "doesn't support Windows 8 or lower" and leaves::CreateFile2undeclared), and links the MinGW runtime statically so the binary doesn't needlibstdc++-6.dll,libgcc_s_seh-1.dllorlibwinpthread-1.dllbeside it. Turn the latter off withGGUF_SERVER_MINGW_STATIC=0.
Two environment gotchas worth knowing:
'ninja' ... inappropriate file type or format— a pyenv-win shim is shadowing the real ninja. Point CMake at a real one, e.g.-DCMAKE_MAKE_PROGRAM="C:/Program Files (x86)/Microsoft Visual Studio/<ver>/BuildTools/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe".- A failed configure leaves a cache behind in
build/, and later builds reuse it. Delete the directory (rmdir /s /q build) before retrying after you change toolchain or options.
Usage
python -m gguf_server # launch the GUI in the browser
gguf-server # same
gguf-server --port 8642 --no-browser
The GUI listens on port 8642; the LLM server it launches defaults to 8888.
GUI features (as in the desktop app's LLM panel):
- Server — start/stop, live status, copyable API base URL, active configuration summary, OpenAI-compatible endpoint reference, and a copyable/editable engine command line
- Model —
.ggufmodel file, optional--mmprojvision projector, and chat template selection (auto-detect from metadata, file, or raw Jinja2) - Settings — host/port, API key, model alias, context length, GPU layers, main GPU, per-GPU tensor split sliders, CPU threads, parallel slots, batch and micro-batch sizes, KV cache types, flash attention, continuous batching, mlock, mmap and verbose logging, plus hardware-derived "Recommended" defaults
- Presets — save the whole configuration, with JSON export/import
- Hardware — CPU, RAM/VRAM meters and per-GPU details, with live polling
- Logs — tail of the running server's log with auto-scroll
Engine CLI passthrough (runs the bundled gguf-server engine binary):
python -m gguf_server engine -- --model model.gguf --port 8888
gguf-server engine -- --help
How it works
pip installcompiles the engine (static ggml + llama + llama-common + mtmd linked into one executable) via scikit-build-core and installs it into the package'sbin/directory.gguf-serverstarts a stdlib HTTP server (default port 8642) serving the static GUI and a small JSON API, and opens the browser.- Starting the server spawns one engine child process with its output redirected to a log file; a watcher thread polls the TCP port until it accepts connections, then reports the endpoint to the GUI. Stopping the GUI stops the child.
- File selection uses a server-side directory listing (
/api/browse) so the GUI gets real filesystem paths — no drag & drop uploads of multi-GB models.
Metadata
Release files for gguf-server 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gguf_server-0.0.3.tar.gz | 3.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gguf_server-0.0.3-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
Total release size: 25.1 MB
Release files / gguf_server-0.0.3.tar.gz
| Download URL | gguf_server-0.0.3.tar.gz |
|---|---|
| Size | 3.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e752e733d4b6fd6da291c585bfd0d9817286c1a537e6bc14f17f58372a60de4
|
|
BLAKE2b-256 checksum How to use checksums |
ecf4e4a76be516cef063ccd203562c6908594909ab4aab5e39d7739fdaa118f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / gguf_server-0.0.3-py3-none-win_amd64.whl
| Download URL | gguf_server-0.0.3-py3-none-win_amd64.whl |
|---|---|
| Size | 21.4 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c66890912f78159dc3124d32cdfe66593820053d08bf5a76401cbad023090e33
|
|
BLAKE2b-256 checksum How to use checksums |
6d9ae7aaa01b7023f3f910127947f6c045d242f70c6536db8154449f3097e0ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|