5 min read

TextGen: Run Local LLMs with Every Knob Exposed (GitHub, Scanned)

The local LLM app formerly called text-generation-webui: five backends, chat, training and an API.

TextGen logo
✅
Scan: safe. Nothing malicious. The optional Superbooga extensions pin ChromaDB versions with a critical advisory, and the --share and --public-api flags put your instance on the internet, so use them knowingly. Scanned Aug 17, 2026; the full report is below.

TextGen is the project most people still know as oobabooga's text-generation-webui, renamed and repackaged as a desktop app. It loads models through llama.cpp, ik_llama.cpp, Transformers, ExLlamaV3 or TensorRT-LLM and switches between them without a restart, with chat, instruct and free-form notebook modes, image and document attachments, tool calling with MCP support, and an API compatible with both OpenAI and Anthropic clients. The full install adds LoRA training and an image-generation tab for diffusers models.

It has been around since December 2022, which makes it one of the oldest tools on this list, and it still exposes the sampler settings and loader options that friendlier apps hide. The portable builds have removed most of the old setup pain: download, unzip, double-click. It is AGPL-3.0, led by oobabooga with nearly 400 contributors, and states it runs with no telemetry.

  • Repository: github.com/oobabooga/textgen
  • Licence: AGPL-3.0 (GNU Affero General Public License v3.0)
  • Language: Python. Stars: 47.7K. Forks: 5,993. Last push: Aug 17, 2026.
  • Scan: safe, Aug 17, 2026, commit c93f887

Who it is for

Tinkerers who want to compare backends and sampler settings on the same model, people training small LoRAs on their own data, and anyone who wants a local API that speaks both OpenAI and Anthropic formats.

Getting started

1. Easiest: download a portable build from the GitHub releases page, unzip it and double-click textgen. From source:

git clone https://github.com/oobabooga/textgen && cd textgen

2. Create a virtual environment and install the portable requirements (files for other hardware are in requirements/portable)

python -m venv venv && source venv/bin/activate && pip install -r requirements/portable/requirements.txt --upgrade

3. Launch with the API on, and open the interface in your browser

python server.py --portable --api --auto-launch

Portable mode runs GGUF models only; put them in user_data/models. For Transformers, ExLlamaV3, training and extensions, the one-click scripts (start_linux.sh, start_macos.sh, start_windows.bat) install Miniforge and PyTorch into installer_files/, about 10 GB, without admin rights.

Safety scan

We cloned oobabooga/textgen at commit c93f887 on Aug 17, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no self-decoding code, no binaries, no bare-IP URLs and no pattern hits in a compact 40,000 lines of Python.
  • start_linux.sh and start_macos.sh, the one-click installers, download a pinned Miniforge release from GitHub with curl and install it inside the project folder; no sudo, no shell-profile changes. The requirements pull a custom Gradio build and llama.cpp binaries from oobabooga's own GitHub releases, so you are trusting that account for compiled code as well as source.
  • The advisory count overstates things. The requirements pin numpy and transformers with wildcards (numpy==2.2.*), which the scanner read as a truncated version and matched against advisories for releases years older; two of the four criticals come from that. The exact pin that does carry advisories is mcp 1.27.0, whose issues are in MCP server transports, while TextGen uses the SDK to connect to servers.
  • The other two criticals are real and optional: the Superbooga and Superbooga v2 extensions pin chromadb 0.4.24 and 0.6.3, both under a code-injection advisory, and both pin posthog, the client ChromaDB uses for its anonymous telemetry. Neither is installed unless you install extension requirements.
  • Seven workflows, none using pull_request_target; the six third-party actions are pinned to tags. Dependabot is on; there is no security policy or contributing guide. --share (a public Gradio link) and --public-api (a Cloudflare tunnel) are off by default, and --api-key exists for when you need them.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time code2 installer scripts
Committed binariesNone.
CI workflows7 workflows. None use pull_request_target. 6 of 6 third-party actions pinned to a tag rather than a commit.
Network hosts15 distinct hosts referenced from source; most often github.com, huggingface.co, download.pytorch.org, repo.radeon.com. No URLs to bare IP addresses.
Known vulnerabilities50 advisories across 32 pinned packages: 4 critical, 28 high, 15 moderate, 2 low, 1 unrated. extensions/google_translate/requirements.txt: 1 packages, 1 advisories; extensions/ngrok/requirements.txt: 1 packages, 0 advisories; extensions/superbooga/requirements.txt: 5 packages, 2 advisories; extensions/superboogav2/requirements.txt: 4 packages, 3 advisories; extensions/whisper_stt/requirements.txt: 1 packages, 0 advisories; requirements/full/requirements.txt: 21 packages, 44 advisories; requirements/full/requirements_amd.txt: 18 packages, 44 advisories; requirements/full/requirements_apple_intel.txt: 18 packages, 44 advisories; requirements/full/requirements_apple_silicon.txt: 18 packages, 44 advisories; requirements/full/requirements_cpu_only.txt: 18 packages, 44 advisories; requirements/full/requirements_nowheels.txt: 18 packages, 44 advisories; requirements/portable/requirements.txt: 12 packages, 10 advisories; requirements/portable/requirements_amd.txt: 12 packages, 10 advisories; requirements/portable/requirements_apple_intel.txt: 12 packages, 10 advisories; requirements/portable/requirements_apple_silicon.txt: 12 packages, 10 advisories; requirements/portable/requirements_cpu_only.txt: 12 packages, 10 advisories; requirements/portable/requirements_cuda131.txt: 12 packages, 10 advisories; requirements/portable/requirements_ik.txt: 12 packages, 10 advisories; requirements/portable/requirements_ik_cpu_only.txt: 12 packages, 10 advisories; requirements/portable/requirements_ik_cuda131.txt: 12 packages, 10 advisories; requirements/portable/requirements_nowheels.txt: 12 packages, 10 advisories; requirements/portable/requirements_vulkan.txt: 12 packages, 10 advisories.
Project hygieneHas automated dependency updates, licence file. Missing security policy, CodeQL, contributing guide.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Installer scripts (2)
Worst known vulnerabilities (24 of 50)
AdvisorySeverityPackageSummary
GHSA-36p7-vc44-83pfcriticalchromadb@0.4.24ChromaDB has a code injection vulnerability
GHSA-36p7-vc44-83pfcriticalchromadb@0.6.3ChromaDB has a code injection vulnerability
GHSA-9fq2-x9r6-wfmfcriticalnumpy@2.2.Numpy Deserialization of Untrusted Data
GHSA-3863-2447-669pcriticaltransformers@5.6.transformers has a Deserialization of Untrusted Data vulnerability
GHSA-2wm9-hf6c-p5crhighchromadb@0.4.24ChromaDB allows any authenticated users to arbitrarily read, write, update, or delete data in any tenant's collection
GHSA-2wm9-hf6c-p5crhighchromadb@0.6.3ChromaDB allows any authenticated users to arbitrarily read, write, update, or delete data in any tenant's collection
GHSA-xph7-9rjv-w5frhighchromadb@0.6.3ChromaDB's SimpleRBACAuthorizationProvider doesn't check which tenant, database, or collection a permission applies to
GHSA-7wx4-6vff-v64phighdiffusers@0.37.Diffusers: TOCTOU Trust Remote Code Bypass
GHSA-98h9-4798-4q5vhighdiffusers@0.37.Diffusers has a `trust_remote_code` bypass via `custom_pipeline` and local custom components
GHSA-j7w6-vpvq-j3gmhighdiffusers@0.37.
GHSA-hvrp-rf83-w775highmcp@1.27.0MCP Python SDK: Experimental task handlers allow any client to access and cancel other clients' tasks
GHSA-jpw9-pfvf-9f58highmcp@1.27.0MCP Python SDK: HTTP transports serve session requests without verifying the authenticated principal
GHSA-vj7q-gjh5-988whighmcp@1.27.0MCP Python SDK: WebSocket server transport does not support Host/Origin validation
GHSA-2fc2-6r4j-p65hhighnumpy@2.2.Numpy arbitrary file write via symlink attack
GHSA-5545-2q6w-2gh6highnumpy@2.2.NumPy NULL Pointer Dereference
GHSA-cw6w-4rcx-xphchighnumpy@2.2.Arbitrary file write in NumPy
GHSA-frgw-fgh6-9g52highnumpy@2.2.Numpy missing input validation
GHSA-29pf-2h5f-8g72hightransformers@5.6.HuggingFace transformers vulnerable to remote code execution
GHSA-fgcw-684q-jj6rhightransformers@5.6.huggingface/transformers: Arbitrary Code Execution During Model Initialization in the LightGlue Model Loading Path
GHSA-hxxf-235m-72v3hightransformers@5.6.Deserialization of Untrusted Data in Hugging Face Transformers
GHSA-qxrp-vhvm-j765hightransformers@5.6.Deserialization of Untrusted Data in Hugging Face Transformers
GHSA-v68g-wm8c-6x7jhightransformers@5.6.transformers has a Deserialization of Untrusted Data vulnerability
GHSA-wrfc-pvp9-mr9ghightransformers@5.6.Deserialization of Untrusted Data in Hugging Face Transformers
GHSA-xrqw-3rrv-vx5whightransformers@5.6.Transformers save_pretrained path traversal allows arbitrary file writes through chat template names

By the numbers

Stars47.7K
Forks5,993
Contributors394
Commits5,752
Open issues805
Open pull requests37
Releases113
Latest releasev4.9
LicenceAGPL-3.0
Main languagePython
Project age3 years
Last pushAug 17, 2026
Tracked files358
Lines of code40.4K
Checkout size32 MB

Lines by language: Python 27K, CSS 4,012, JavaScript 3,518, Markdown 2,725, YAML 1,832, JSON 688.

Questions

Is TextGen free?

Yes. TextGen is AGPL-3.0 and free for any use, with no paid tier and no cloud service. The AGPL only bites if you modify it and offer it to other people over a network: then you must publish your changes. Models are separate downloads from Hugging Face, each under its own licence, and nothing in the app is tied to an account.

Is TextGen the same project as text-generation-webui?

Yes. The repository created in December 2022 as oobabooga/text-generation-webui was renamed TextGen and now lives at oobabooga/textgen, with its history, issues and stars intact. The browser interface still exists at 127.0.0.1:7860; the portable builds wrap it as a desktop app that opens in its own window when you double-click it.

Does TextGen have an API?

Yes. Start it with --api and it serves OpenAI-compatible Chat and Completions endpoints and an Anthropic-compatible Messages endpoint, with tool calling, on port 5000 by default. Point any OpenAI or Anthropic client at it by changing the base URL. Set --api-key before exposing it beyond localhost, and remember that --public-api publishes it through a Cloudflare tunnel.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.