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 textgen2. 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 --upgrade3. Launch with the API on, and open the interface in your browser
python server.py --portable --api --auto-launchPortable 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
| Check | Result |
|---|---|
| Secrets | None found. |
| Suspicious code | None found. |
| Install-time code | 2 installer scripts |
| Committed binaries | None. |
| CI workflows | 7 workflows. None use pull_request_target. 6 of 6 third-party actions pinned to a tag rather than a commit. |
| Network hosts | 15 distinct hosts referenced from source; most often github.com, huggingface.co, download.pytorch.org, repo.radeon.com. No URLs to bare IP addresses. |
| Known vulnerabilities | 50 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 hygiene | Has automated dependency updates, licence file. Missing security policy, CodeQL, contributing guide. |
| OpenSSF Scorecard | Not 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)
- start_linux.sh, 78 lines; talks to github.com
- start_macos.sh, 78 lines; talks to github.com
Worst known vulnerabilities (24 of 50)
| Advisory | Severity | Package | Summary |
|---|---|---|---|
| GHSA-36p7-vc44-83pf | critical | chromadb@0.4.24 | ChromaDB has a code injection vulnerability |
| GHSA-36p7-vc44-83pf | critical | chromadb@0.6.3 | ChromaDB has a code injection vulnerability |
| GHSA-9fq2-x9r6-wfmf | critical | numpy@2.2. | Numpy Deserialization of Untrusted Data |
| GHSA-3863-2447-669p | critical | transformers@5.6. | transformers has a Deserialization of Untrusted Data vulnerability |
| GHSA-2wm9-hf6c-p5cr | high | chromadb@0.4.24 | ChromaDB allows any authenticated users to arbitrarily read, write, update, or delete data in any tenant's collection |
| GHSA-2wm9-hf6c-p5cr | high | chromadb@0.6.3 | ChromaDB allows any authenticated users to arbitrarily read, write, update, or delete data in any tenant's collection |
| GHSA-xph7-9rjv-w5fr | high | chromadb@0.6.3 | ChromaDB's SimpleRBACAuthorizationProvider doesn't check which tenant, database, or collection a permission applies to |
| GHSA-7wx4-6vff-v64p | high | diffusers@0.37. | Diffusers: TOCTOU Trust Remote Code Bypass |
| GHSA-98h9-4798-4q5v | high | diffusers@0.37. | Diffusers has a `trust_remote_code` bypass via `custom_pipeline` and local custom components |
| GHSA-j7w6-vpvq-j3gm | high | diffusers@0.37. | |
| GHSA-hvrp-rf83-w775 | high | mcp@1.27.0 | MCP Python SDK: Experimental task handlers allow any client to access and cancel other clients' tasks |
| GHSA-jpw9-pfvf-9f58 | high | mcp@1.27.0 | MCP Python SDK: HTTP transports serve session requests without verifying the authenticated principal |
| GHSA-vj7q-gjh5-988w | high | mcp@1.27.0 | MCP Python SDK: WebSocket server transport does not support Host/Origin validation |
| GHSA-2fc2-6r4j-p65h | high | numpy@2.2. | Numpy arbitrary file write via symlink attack |
| GHSA-5545-2q6w-2gh6 | high | numpy@2.2. | NumPy NULL Pointer Dereference |
| GHSA-cw6w-4rcx-xphc | high | numpy@2.2. | Arbitrary file write in NumPy |
| GHSA-frgw-fgh6-9g52 | high | numpy@2.2. | Numpy missing input validation |
| GHSA-29pf-2h5f-8g72 | high | transformers@5.6. | HuggingFace transformers vulnerable to remote code execution |
| GHSA-fgcw-684q-jj6r | high | transformers@5.6. | huggingface/transformers: Arbitrary Code Execution During Model Initialization in the LightGlue Model Loading Path |
| GHSA-hxxf-235m-72v3 | high | transformers@5.6. | Deserialization of Untrusted Data in Hugging Face Transformers |
| GHSA-qxrp-vhvm-j765 | high | transformers@5.6. | Deserialization of Untrusted Data in Hugging Face Transformers |
| GHSA-v68g-wm8c-6x7j | high | transformers@5.6. | transformers has a Deserialization of Untrusted Data vulnerability |
| GHSA-wrfc-pvp9-mr9g | high | transformers@5.6. | Deserialization of Untrusted Data in Hugging Face Transformers |
| GHSA-xrqw-3rrv-vx5w | high | transformers@5.6. | Transformers save_pretrained path traversal allows arbitrary file writes through chat template names |
By the numbers
| Stars | 47.7K |
|---|---|
| Forks | 5,993 |
| Contributors | 394 |
| Commits | 5,752 |
| Open issues | 805 |
| Open pull requests | 37 |
| Releases | 113 |
| Latest release | v4.9 |
| Licence | AGPL-3.0 |
| Main language | Python |
| Project age | 3 years |
| Last push | Aug 17, 2026 |
| Tracked files | 358 |
| Lines of code | 40.4K |
| Checkout size | 32 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.
