Skip to content

Releases: deposist/llama.cpp-Control-Deck

llama.cpp Control Deck v1.0.3

Choose a tag to compare

@deposist deposist released this 30 May 12:26

Release Notes — llama.cpp Control Deck v1.0.3

Release date: 2026-05-30

Highlights

v1.0.3 is a UX-focused release. It significantly improves the browser control
panel with accessibility, onboarding, dark mode, batch operations, drag-and-drop
service ordering, inline validation, offline feedback, and broader RU/EN i18n.

This release does not include developer-only roadmap or CI audit files in the
published repository state.

Major UX Improvements

  • Dark mode with persisted preference and system prefers-color-scheme
    fallback.
  • First-run wizard when runtime or model configuration is missing.
  • Empty Services state with a clear Add service call to action.
  • Keyboard-accessible modals: Escape closes dialogs, focus is trapped
    inside active modals, and the first useful field receives focus on open.
  • ARIA live announcements for toast/status messages.
  • Offline indicator when /api/state polling fails.
  • Responsive modals with max-height: 90vh and internal scrolling.

Service Management

  • Batch Start selected / Stop selected actions.
  • Checkbox selection for services.
  • Drag-and-drop service reordering saved through POST /api/instances/reorder.
  • Undo delete via button or Ctrl+Z / Cmd+Z.
  • Health sparklines showing the last 10 health states per service.
  • Inline service validation with debounce and live command preview updates.

Performance & Reliability

  • Adaptive refresh polling (setTimeout) replaces fixed setInterval.
  • Tkinter logs refresh only when the Logs tab is active.
  • Tkinter instance table updates rows in place instead of recreating the entire
    Treeview.
  • load_config() uses an mtime-based cache with defensive deepcopy().
  • Local browser error telemetry is stored in logs/web-client-errors.jsonl via
    POST /api/client-error.

Internationalization & Accessibility

  • Broader RU/EN coverage for old hardcoded labels and new UX controls.
  • Path picker file sizes now display as human-readable IEC units.
  • Text inputs use dir="auto" for mixed LTR/RTL text.

Upgrade Notes

No breaking changes. Existing config.json files remain compatible.

If you use the Web UI, refresh the page after upgrading to load the new CSS and
JavaScript assets.

Files Changed

  • config.py
  • control_web.py
  • llama_cpp_gui.py
  • static/control.css
  • static/control.js
  • templates/index.html
  • CHANGELOG.md
  • README.md
  • pyproject.toml

Compatibility

Component Minimum Tested
Python 3.10 3.12
OS Linux Ubuntu 22.04/24.04
Browser any modern Chromium 136, Firefox 139

Full changelog: CHANGELOG.md

llama.cpp Control Deck v1.0.2

Choose a tag to compare

@deposist deposist released this 30 May 07:51

Release Notes — llama.cpp Control Deck v1.0.2

Release date: 2026-05-30

Highlights

This is a maintenance and reliability release. It fixes performance bottlenecks
in the FastAPI web UI, removes a dead background thread from the Tkinter GUI,
and addresses a DOM-based XSS vector in the browser frontend.

Bug Fixes

  • Event-loop blocking in web UItail_file() and template read_text()
    previously ran synchronously inside async FastAPI endpoints. Under heavy log
    files this froze the entire uvicorn worker for all connected clients.
    Both calls now execute in a run_in_threadpool wrapper.

  • Dead HealthCheckWorker thread (Tkinter)refresh_status() spawned a
    HealthCheckWorker on every 3-second tick. The worker pushed results into a
    queue.Queue, but the consumer only contained pass. Over time the queue
    leaked memory and wasted CPU. The worker and all related code have been
    removed.

  • XSS via innerHTML in web UIrenderInstances() used template
    literals to inject item.name, item.id, and item.profile directly into
    the DOM. Because these strings originate from config.json, a malicious or
    accidentally corrupted config could execute arbitrary JavaScript. The
    function now builds every node via document.createElement and
    textContent.

  • Request flooding on slow networkssetInterval(refresh, 2500) did not
    guard against overlapping requests. If the server took longer than 2.5 s to
    respond, requests stacked up indefinitely, causing browser memory growth and
    race conditions on shared state.data. A _refreshPending guard now
    skips the next tick until the current one finishes.

  • Accessibility contrast failure.warning text colour #9a6700 on
    #fff8db produced ~3.5:1 contrast, below the WCAG AA threshold of 4.5:1.
    Changed to #6e5000 (5.96:1).

  • Hardcoded lang="ru" — the HTML root element defaulted to Russian even
    before JavaScript i18n initialisation, causing screen readers to announce the
    page with the wrong voice. Default is now lang="en"; the JS language
    switcher updates it dynamically as before.

Documentation Updates

  • README now documents the web control panel (./start_web.sh) in the Russian
    section, matching the existing English documentation.
  • Troubleshooting tables in both languages include entries for the fixed web UI
    freeze and contrast issues.
  • CHANGELOG.md and pyproject.toml bumped to 1.0.2.

Upgrade Notes

No breaking changes. Existing config.json files remain compatible.

  • Web UI users will see smoother refreshes and no more browser tab memory growth.
  • Tkinter GUI users will notice slightly lower background CPU usage.
  • If you edited config.json by hand and included HTML/JS characters in
    instance names, they are now rendered as plain text instead of being parsed.

Files Changed

  • control_web.py
  • llama_cpp_gui.py
  • static/control.js
  • static/control.css
  • templates/index.html
  • CHANGELOG.md
  • README.md
  • pyproject.toml

Compatibility

Component Minimum Tested
Python 3.10 3.12
OS Linux Ubuntu 22.04/24.04
Browser any modern Chromium 136, Firefox 139

Full changelog: CHANGELOG.md

llama.cpp Control Deck v1.0.1

Choose a tag to compare

@deposist deposist released this 28 May 09:44

llama.cpp Control Deck v1.0.1

Patch release focused on the new local FastAPI Web UI and a simpler first-run experience.

Highlights

  • Added the browser-based control panel launched with ./start_web.sh.
  • Added beginner quick start, RU/EN language toggle, status polling, validation warnings, diagnostics, logs, and GPU/device checks in the Web UI.
  • Added Runtime & updates for release checks, background llama-server downloads, download status, and progress lines.
  • Added Services management for creating, editing, validating, duplicating, deleting, starting, stopping, and restarting configured instances without editing config.json.
  • Added server-side Browse path picker for Python, llama-server, working directories, library directories, .gguf models, MMProj files, model directories, and preset files.
  • Removed repository files that are not needed by regular users: optimization plans, dev-only tests/configs, issue templates, CI, and community maintenance docs.
  • Kept the Tkinter GUI as a legacy fallback; Electron, Node.js, React, Vue, and Svelte are not required.

Upgrade Notes

  • Existing config.json files remain compatible.
  • The Web UI listens on 127.0.0.1:8765 by default.
  • The path picker selects paths on the machine running control_web.py; it does not upload or copy files through the browser.

Install / Run

git clone https://github.com/deposist/llama.cpp-Control-Deck.git
cd llama.cpp-Control-Deck
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./start_web.sh

Then open:

http://127.0.0.1:8765

Legacy Tkinter UI is still available:

./start_gui.sh

Verification

Release checks passed locally:

python3 -m py_compile config.py llama_cpp_gui.py llama_server_manager.py ollama_proxy.py llama_cpp_release.py control_web.py
node --check static/control.js
python3 control_web.py --help
python3 -m json.tool config.example.json
ruff check . --line-length 100 --select E,F,W,I,B,C4,UP --ignore E501,B008,C416

llama.cpp Control Deck v1.0.0

Choose a tag to compare

@deposist deposist released this 25 May 06:57

llama.cpp Control Deck v1.0.0

First stable public release of llama.cpp Control Deck.

Highlights

  • Tkinter desktop GUI for managing local llama-server processes.
  • Multi-instance workflows for chat, embeddings, rerank, multimodal, and router profiles.
  • Ollama-compatible FastAPI proxy that forwards requests to the OpenAI-compatible llama-server API.
  • Automatic detection of Python, llama-server, working directory, and LD_LIBRARY_PATH.
  • Beginner setup through ./start_gui.sh --setup and the GUI Beginner setup button.
  • GPU/device diagnostics, health checks, logs, graceful shutdown, and CLI diagnostics.
  • Full bilingual README: English first, Russian below.
  • GitHub community files, issue templates, CI, Dependabot, security policy, and release checklist.

Quick Start

git clone https://github.com/deposist/llama.cpp-Control-Deck.git
cd llama.cpp-Control-Deck
sudo apt install -y python3 python3-venv python3-pip python3-tk
./start_gui.sh --setup

Requirements

  • Linux
  • Python 3.10+
  • Built llama.cpp llama-server
  • python3-tk / equivalent Tkinter system package
  • Optional: NVIDIA GPU with CUDA build of llama.cpp

Verification

Release checks passed:

  • ruff check .
  • python3 -m pytest -q
  • bash -n start_gui.sh
  • python3 -m py_compile config.py llama_cpp_gui.py llama_server_manager.py ollama_proxy.py
  • config.example.json JSON validation

Notes

  • config.json, logs/, runtime/, models, local virtualenvs, and caches are intentionally ignored.
  • The built-in proxy is intended for trusted local networks. Do not expose it publicly without firewall/VPN/reverse-proxy authentication.