v2.4.0 — Settings Polish, Linux Drag Fix, and Configurable HuggingFace Path
Locally Uncensored v2.4.0 is a polish release. Eight fixes, two of them surfaced through community feedback on Discord, six caught during an internal end-to-end pass on the v2.3.9 build. No new headline features — this release exists so the next feature release lands on a cleaner foundation.
Quick TL;DR before we dig in:
- Single-instance lock — double-clicking the shortcut focuses the existing window instead of spawning a second process
- Settings > Model Storage — paste or pick the folder where HuggingFace GGUF downloads land
- Settings > Privacy — in-app statement of what runs locally and what doesn’t
- Settings > Onboarding — a button that re-runs the first-launch wizard on demand
- Reset tutorial — the button now actually does what its label promises
- Linux window drag — the title-bar drag works on Ubuntu 24.04 again
- Discover — the HuggingFace download path is no longer printed twice
- HuggingFace search heuristic — search results for repos with a quant tag in the name no longer 404 on download
Single-Instance Lock
Before v2.4.0, double-clicking the desktop shortcut started a second locally-uncensored.exe process. Both instances would race each other writing to %APPDATA%/Locally Uncensored/store_backup.json — not a frequent corruption source, but a real one when both happened to flush at the same millisecond.
v2.4.0 ships with tauri-plugin-single-instance. The second launch focuses, un-minimizes, and brings the existing window to front. No new process. Double-checked with three back-to-back launches: only one PID survives.
Settings > Model Storage — Configurable HuggingFace Folder
The Model Manager > Discover > Text tab lets you download GGUF models from HuggingFace. Until v2.4.0, the destination folder was always auto-detected from the active openai-compat provider — usually LM Studio’s ~/.lmstudio/models or the equivalent on Linux/macOS.
That worked fine for single-disk setups. It did not work for dual-boot users who wanted a shared model partition between Linux and Windows, or anyone running a NAS-mounted models folder. Reported on Discord by diimmortalis.
v2.4.0 adds a dedicated Settings > Model Storage section. Three controls:
- A path input (placeholder shows
(auto-detect)when empty — meaning the previous behaviour) - A Browse… button that opens the native folder picker
- A Reset button that clears the override (only visible when set)
The override takes effect immediately. Discover’s subtitle updates live to show the new Saves to: <path>. Verified end-to-end with a Gemma 4 E4B download (4.6 GB) landing in a custom Desktop folder, while the LM Studio default folder stayed untouched.
Settings > Privacy — In-App Statement
The privacy claim has always been on the README and in the schema.org metadata, but never inside the app itself. That mattered for first-launch trust — if you can’t be bothered to open GitHub, you were taking the README at its word.
v2.4.0 adds a Settings > Privacy section that lays out the actual behaviour:
- 100% local by default. Chat, agent runs, image and video generation all execute on your machine. No telemetry, no analytics, no model pings home.
- The only outbound network calls without explicit opt-in are GitHub Releases update checks.
- Cloud provider APIs (OpenAI, Anthropic, OpenRouter, Groq) only fire when you configure them with your own keys.
- Conversations, memories, and generated media live in
%APPDATA%/Locally Uncensoredon Windows (or the equivalent on Linux/macOS). Back up the folder, move it between machines, or delete it — LU writes nothing else.
Settings > Onboarding — Re-Run Wizard
The first-launch wizard runs once: hardware scan, recommended models, agent-mode tour. After that, the only way to see it again was Reset to Defaults, which wipes every other preference too — not great if you wanted to redo the hardware scan or show the app to a friend.
v2.4.0 adds an Onboarding section to Settings with a single Re-run onboarding button. It clears the marker file, flips onboardingDone back to false, and reloads the app. The wizard renders again from step 1.
The Rust command set_onboarding_done now accepts an optional boolean instead of always writing the marker, so callers can also clear it.
Reset Tutorial — Actually Resets Now
This was a quiet bug for several releases. The Reset tutorial link in Settings > Agent Permissions called setTutorialCompleted(), which unconditionally sets tutorialCompleted: true. Clicking it on a fresh install silently skipped the agent-mode tour. Clicking it after seeing the tour did nothing at all.
v2.4.0 adds a dedicated resetTutorial() store action that flips the flag back to false, and rewires the button. Verified live: click Reset, create a new chat, click the Agent toggle — the “Welcome to Agent Mode” tutorial renders again. A regression test in stores.test.ts guards against the next regression.
Linux Window Drag Fix
On Ubuntu 24.04, dragging the LU title bar threw an unhandled Promise rejection:
window.start_dragging not allowed.
Permissions associated with this command: core:window:allow-start-dragging
The window stayed anchored. Keyboard tiling (Super+arrows) still worked, so the bug only bit users who actually dragged windows around. Reported on Discord by diimmortalis with a clean Promise-rejection dump.
The fix was one line in src-tauri/capabilities/default.json — core:window:allow-start-dragging was missing from the capability list. Added.
Discover — No More Duplicate Path Display
Cosmetic but jarring: the Discover tab showed the HuggingFace download path twice. Once in the section subtitle (“Download GGUF models from HuggingFace. Saves to: ...”) and again in a paragraph below the download grid (“Downloads save to: ...”). v2.4.0 removes the second one.
HuggingFace Search Filename Fix
This one is a pre-existing bug that surfaced while end-to-end testing the new Model Storage feature. Searching the Discover tab for tinyllama Q4 returned repos like hieupt/TinyLlama-1.1B-Chat-v1.0-Q4_K_M-GGUF. The client guessed the inner GGUF filename by appending -Q4_K_M.gguf to the repo’s base name. For repos that already ended in a quant tag, that produced doubled tags — ...-Q4_K_M-Q4_K_M.gguf — which 404 every time on HuggingFace.
v2.4.0 extracts the heuristic into deriveQ4FilenameFromRepo(), adds a case-insensitive quant-suffix detector (matching Q4_K_M, Q5_K_M, IQ2_XXS, UD-IQ, BF16, FP16 and friends), and collapses the doubled tag. Nine regression tests in discover-hf-filename.test.ts cover the edge cases.
Tests & Verification
Test suite went from 2205 to 2216 (+11 regression tests). cargo check clean. tsc --noEmit clean.
Live end-to-end on the installed v2.4.0 build:
- Single-instance: 3 back-to-back exe launches → 1 PID
- HF download override: typed custom path, Discover subtitle updated, Gemma 4 E4B partial download (35.9 MB at 897 KB/s) landed in the picked folder, LM Studio default untouched
- Re-run onboarding: click → marker deleted → 6-step wizard renders → Get Started → marker re-created with fresh timestamp
- Reset tutorial: click →
tutorialCompletedflipped to false in the persisted store → new chat → Agent toggle → tutorial renders
Download
v2.4.0 is on GitHub Releases. Installers for Windows (.exe, .msi) and Linux (.deb, .rpm, .AppImage) — the auto-update channel is signed against a public minisign key. Auto-update picks the new build up on next launch for anyone on v2.3.x.
Related
- v2.3.1 release notes — in-app Ollama install + configurable ComfyUI port
- v2.3.0 release notes — Remote Access + Codex streaming + agent overhaul
- How to run uncensored AI locally — full setup walkthrough
- Best local AI apps in 2026 — landscape overview
Locally Uncensored v2.4.0. AGPL-3.0 licensed. Built by PurpleDoubleD. Bug reports and feature requests on GitHub Discussions or in the Discord.