{
  "data": {
    "a": {
      "slug": "localai",
      "name": "LocalAI",
      "vendor": "Ettore Di Giacinto and the LocalAI team",
      "vendorUrl": "https://localai.io",
      "kind": "http-api",
      "category": "local-ai",
      "summary": "Open-source engine in Go, MIT licensed, that runs models on the owner's hardware behind OpenAI-, Anthropic-, Ollama- and ElevenLabs-compatible APIs on port 8080.",
      "url": "https://www.anchorterminal.com/tools/localai",
      "markdownUrl": "https://www.anchorterminal.com/tools/localai.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/localai.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/localai.json",
      "repo": "https://github.com/mudler/LocalAI",
      "license": "MIT. Each backend image wraps an upstream engine (llama.cpp, vLLM, whisper.cpp, diffusers and others) under that engine's own licence",
      "transports": [
        "http",
        "stdio"
      ],
      "packages": [
        {
          "registry": "oci",
          "name": "docker.io/localai/localai"
        }
      ],
      "auth": "mixed",
      "authNotes": "Off by default. With no keys and no user accounts configured, every request is accepted, and the server refuses to start on a public address in that state unless `--allow-insecure-public-bind` is set. `LOCALAI_API_KEY` sets shared keys with full admin rights. `LOCALAI_AUTH=true` turns on user accounts (local, GitHub OAuth or OIDC), and each user creates revocable keys stored as HMAC-SHA256, with an optional expiry in the source, carrying the user's role (admin or user) and per-model and per-feature permissions. Keys go in `Authorization: Bearer`, `x-api-key`, `xi-api-key` or a `token` cookie.",
      "pricing": "free",
      "pricingNotes": "Free and MIT with nothing to buy. You run it on your own hardware. The project takes sponsorship through GitHub Sponsors.",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source (checked 2026-10-03).",
        "endpoints": []
      },
      "toolCount": 42,
      "popularity": {
        "githubStars": 47800,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-03"
      },
      "docsUrl": "https://localai.io/basics/getting_started/",
      "openapi": "https://raw.githubusercontent.com/mudler/LocalAI/master/swagger/swagger.json",
      "capabilities": [
        "inference.local",
        "inference.open-weights",
        "agent.mcp-client",
        "embed.text",
        "rerank",
        "speech.stt",
        "speech.tts",
        "voice.speech-to-speech",
        "image.generate",
        "video.generate",
        "guard.pii",
        "finetune.sft",
        "db.vector"
      ],
      "tags": [
        "open-source",
        "local",
        "self-hosted",
        "free",
        "no-card",
        "openai-compatible",
        "openapi",
        "mcp",
        "go",
        "docker",
        "streaming",
        "open-weights",
        "no-telemetry"
      ],
      "lastRelease": "2026-10-02",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 68,
        "grade": "B",
        "agentReady": false,
        "rank": 216,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 1,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 71,
          "maintenance": 80,
          "payments": 60,
          "reliability": 84,
          "schema": 81,
          "security": 62,
          "transparency": 47
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-03"
        },
        "negative": -3,
        "negativeNotes": [
          "2026-07-07. CVE-2026-59707 (8.6 at NVD under CVSS 3.1, published by VulnCheck), an unauthenticated server-side request forgery through POST /models/apply in v4.3.1 and earlier, reported in issue #10665. The code now refuses private, loopback and metadata addresses in gallery config fetches, with a comment citing the issue, from v4.8.0 at the latest. The project published no GitHub advisory, the fix commit NVD and VulnCheck name (f9b968e) is an unrelated docs change, and SECURITY.md still lists 3.x as the supported series. Fixed, documented only by a third party, -3. https://nvd.nist.gov/vuln/detail/CVE-2026-59707; https://github.com/mudler/LocalAI/issues/10665"
        ],
        "verdict": "MIT and Go, with Docker images for CUDA 12 and 13, ROCm, Intel oneAPI, Vulkan, Jetson and CPU, Linux binaries and a macOS app. No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin.",
        "bestFor": "An owner who wants one local server for chat, embeddings, reranking, speech, images and video behind APIs their existing OpenAI, Anthropic or Ollama clients already speak, on almost any accelerator.",
        "strengths": [
          "MIT and Go, with Docker images for CUDA 12 and 13, ROCm, Intel oneAPI, Vulkan, Jetson and CPU, Linux binaries and a macOS app",
          "OpenAI, Anthropic, Open Responses, Ollama and ElevenLabs-compatible endpoints, with a Swagger 2.0 file of 133 operations served by every instance",
          "429 and 503 responses carry Retry-After, and errors come in the calling client's own envelope",
          "Optional user accounts with hashed, revocable keys, per-model and per-feature permissions and per-user quotas",
          "v4.11.0 on 2 October 2026, ten releases in 90 days, and the Tests workflow passing on master"
        ],
        "weaknesses": [
          "No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin",
          "CVE-2026-59707, an unauthenticated SSRF in v4.3.1 and earlier, published by VulnCheck in July 2026 with no advisory from the project",
          "SECURITY.md still names 3.x as the supported series, and there's no security.txt or privacy policy",
          "The MCP admin server registers 42 tools against the 19 its docs list, with no annotations, and its writes are held back only by a prompt",
          "No breaking-change section in the release notes, and the unsigned macOS DMG needs its quarantine flag removed by hand"
        ],
        "agentNotes": [
          "Send `Authorization: Bearer \u003ckey\u003e` when the operator has set keys. A 401 means the instance has auth on",
          "Read /.well-known/localai.json and /api/instructions first. Both answer without a key and list what this instance can do",
          "Back off on 429 and 503 for the Retry-After seconds. A 503 can mean the model is still loading",
          "Start `local-ai mcp-server` with `--read-only` unless the task is to install or delete models",
          "Take model names from /v1/models. Each instance names its own"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 68
          }
        ],
        "editorialScores": {
          "ergonomics": 71,
          "maintenance": 80,
          "payments": 60,
          "reliability": 84,
          "schema": 81,
          "security": 62,
          "transparency": 67
        },
        "provenanceScore": 27
      },
      "connect": {
        "install": "docker run -ti --name local-ai -p 8080:8080 localai/localai:latest",
        "http": "curl http://localhost:8080/v1/chat/completions -H \"Content-Type: application/json\" -d '{\n  \"model\": \"qwen3-4b\",\n  \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]\n}'"
      },
      "letme": {
        "capability": "https://letme.dev/inference.local",
        "tool": "https://letme.dev/localai"
      },
      "area": "models",
      "provenance": {
        "legalEntity": "",
        "domain": "localai.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/mudler/LocalAI/releases",
        "securityTxt": "none",
        "checked": "2026-10-03",
        "notes": [
          "No company is named. The `LICENSE` copyright line reads Ettore Di Giacinto, and the README names him as project lead with Richard Palethorpe as maintainer.",
          "We found no terms or privacy page in the docs site's source, and localai.io/.well-known/security.txt and localai.io/llms.txt return 404.",
          "There's no hosted endpoint. Each instance answers on the operator's own host, by default port 8080."
        ],
        "score": 27
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/localai.json",
      "live": {
        "slug": "localai",
        "versions": [
          {
            "registry": "github",
            "name": "mudler/LocalAI",
            "version": "v4.11.0",
            "released": "2026-10-02",
            "seenAt": "2026-10-08T16:19:18.204342624Z"
          }
        ],
        "githubStars": 49433,
        "securityTxt": {
          "url": "https://localai.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:38.826464071Z"
        },
        "domain": {
          "domain": "localai.io",
          "checkedAt": "2026-10-04T13:07:02.946116654Z"
        },
        "updatedAt": "2026-10-08T16:19:18.204342624Z"
      }
    },
    "answer": "LocalAI scores 68 (B) on agent readiness against TextGen's 45.1 (E), and leads in 5 of 7 scored categories.",
    "b": {
      "slug": "text-generation-webui",
      "name": "TextGen",
      "vendor": "oobabooga",
      "vendorUrl": "https://github.com/oobabooga",
      "kind": "platform",
      "category": "local-ai",
      "summary": "Open-source desktop and browser app for running language models on the owner's hardware, formerly text-generation-webui. With `--api` it serves an OpenAI and Anthropic-compatible local API with tool calling, vision, embeddings and image generation.",
      "url": "https://www.anchorterminal.com/tools/text-generation-webui",
      "markdownUrl": "https://www.anchorterminal.com/tools/text-generation-webui.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/text-generation-webui.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/text-generation-webui.json",
      "repo": "https://github.com/oobabooga/textgen",
      "license": "AGPL-3.0",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "api-key",
      "authNotes": "The API takes one optional key from `--api-key`, off by default, sent as `Authorization: Bearer` on the OpenAI routes and as `x-api-key` on `/v1/messages`. A second key from `--admin-key` guards model and LoRA loading, unloading and listing, and equals the API key when unset. Keys are set at launch, have no scopes and change only with a restart. Without `--listen` or `--public-api` the server binds 127.0.0.1, rejects other Host headers and limits CORS to localhost. The web UI has no login unless `--gradio-auth` is set.",
      "pricing": "free",
      "pricingNotes": "Free and AGPL-3.0, with no account, card or paid edition. Portable builds and source are on GitHub (checked 2026-10-08).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the README, the docs folder or the API source (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 47700,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://github.com/oobabooga/textgen/wiki",
      "capabilities": [
        "inference.local",
        "inference.open-weights",
        "agent.mcp-client",
        "embed.text",
        "image.generate"
      ],
      "tags": [
        "open-source",
        "local",
        "self-hosted",
        "free",
        "no-card",
        "account-free",
        "openai-compatible",
        "open-weights",
        "streaming",
        "mcp",
        "docker",
        "no-telemetry"
      ],
      "lastRelease": "2026-05-20",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 45.1,
        "grade": "E",
        "agentReady": false,
        "rank": 775,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 15,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 50,
          "maintenance": 24,
          "payments": 60,
          "reliability": 51,
          "schema": 61,
          "security": 40,
          "transparency": 49
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": -4,
        "negativeNotes": [
          "2026-03-18. Two Critical advisories at 9.1. GHSA-jg96-p5p6-q3cv (CVE-2026-35050) let a user of the web UI write Python files through a path traversal in extension settings and run them, in 4.1 and earlier, fixed in 4.1.1. GHSA-4p45-76cc-7p62 let a caller write or delete files through a character name on instances started with `--listen`, fixed in 4.0. Both fixed and published, -2. https://github.com/oobabooga/textgen/security/advisories/GHSA-jg96-p5p6-q3cv",
          "2026-03-18. GHSA-fpwc-4mvr-7jpr (High, 7.1). `/v1/chat/completions` and `/v1/completions` fetched any `image_url` from the server side, so a caller could reach internal addresses, in 4.1 and earlier. Fixed in 4.1.1 and published, -1. https://github.com/oobabooga/textgen/security/advisories/GHSA-fpwc-4mvr-7jpr",
          "2025-10-13 to 2026-04-03. Seven more advisories in the year, four High and three Moderate, among them a file read through an uploaded symbolic link, four path traversals in preset, grammar, template and prompt loading, an SSRF in the superbooga extensions and a Gradio path-check bypass fixed in 4.3. All published with fixes, -1. https://github.com/oobabooga/textgen/security"
        ],
        "verdict": "AGPL-3.0 with no telemetry, and a local API on 127.0.0.1:5000 that checks the Host header, limits CORS to localhost and separates an admin key from the caller's key. No release since v4.9 on 20 May 2026, no code commits since 31 May, no test suite, and ten security advisories in the year, all fixed.",
        "bestFor": "A person who wants one app for several backends (llama.cpp, ExLlamaV3, Transformers) with an OpenAI and Anthropic-compatible endpoint, LoRA training and image generation.",
        "strengths": [
          "AGPL-3.0, with analytics switched off in the source and a README that states zero telemetry",
          "One server answers `/v1/chat/completions`, `/v1/completions` and Anthropic's `/v1/messages`, with tool calling and streaming",
          "Since v4.9 the API rejects Host headers other than localhost and 127.0.0.1 and limits CORS to localhost unless `--listen` or `--public-api` is set",
          "A separate `--admin-key` guards model and LoRA loading, apart from the `--api-key` callers use",
          "Ten security advisories published on GitHub with patched versions named, the newest on 3 April 2026"
        ],
        "weaknesses": [
          "No release since v4.9 on 20 May 2026 and no code commit on `main` or `dev` since 31 May 2026",
          "No test suite. The seven GitHub workflows only build release packages on manual dispatch",
          "807 open issues and 40 open pull requests, with no SECURITY.md or disclosure address",
          "Two Critical advisories (9.1) published on 18 March 2026, both path traversals in the web UI, fixed in 4.0 and 4.1.1",
          "The API key is off by default, set only at launch, and has no scopes or per-client keys",
          "No rate limits, error list or published OpenAPI file in the docs. The schema is served only by a running server at `/docs`"
        ],
        "agentNotes": [
          "Ask the owner to launch with `--api`. Nothing listens on port 5000 without it, and a model must be loaded first",
          "Call `http://127.0.0.1:5000/v1`. Any Host header other than localhost or 127.0.0.1 gets 400 `Invalid host header` unless `--listen` is set",
          "Send the key as `Authorization: Bearer` on OpenAI routes and as `x-api-key` on `/v1/messages`. Model loading needs the admin key",
          "Read `http://127.0.0.1:5000/docs` or `modules/api/typing.py` for parameters. `max_tokens` defaults to 512 on chat completions",
          "Run tool calls yourself. The API returns `finish_reason: \"tool_calls\"` and executes nothing on the server",
          "Use the repository name `oobabooga/textgen`. The old `text-generation-webui` URL redirects"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 45.1
          }
        ],
        "editorialScores": {
          "ergonomics": 50,
          "maintenance": 24,
          "payments": 60,
          "reliability": 51,
          "schema": 61,
          "security": 40,
          "transparency": 70
        },
        "provenanceScore": 27
      },
      "connect": {
        "install": "git clone https://github.com/oobabooga/textgen\ncd textgen\npython -m venv venv\nsource venv/bin/activate\npip install -r requirements/portable/requirements.txt --upgrade\npython server.py --portable --api --auto-launch",
        "http": "curl http://127.0.0.1:5000/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}], \"temperature\": 0.6, \"top_p\": 0.95, \"top_k\": 20}'"
      },
      "letme": {
        "capability": "https://letme.dev/inference.local",
        "tool": "https://letme.dev/text-generation-webui"
      },
      "area": "models",
      "provenance": {
        "legalEntity": "",
        "domain": "github.com/oobabooga",
        "domainRegistered": "",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/oobabooga/textgen/releases",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The project belongs to a developer who publishes as oobabooga. The LICENSE is the AGPL-3.0 text and names no legal entity, and the README acknowledges a grant from Andreessen Horowitz in August 2023.",
          "No vendor domain. The README links only the GitHub repository, its wiki, a subreddit, a Substack and a Hugging Face space.",
          "No terms of use and no privacy policy were found in the repository, the README or the wiki, so both fields are left out. The README states zero telemetry.",
          "No SECURITY.md (the Security tab says none is set up) and no security.txt of the project's own.",
          "There's no hosted endpoint. The API answers on the owner's machine, at 127.0.0.1:5000 by default."
        ],
        "score": 27
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/text-generation-webui.json"
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "Model platform",
        "name": "Kind"
      },
      {
        "a": "Ettore Di Giacinto and the LocalAI team",
        "b": "oobabooga",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, stdio",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT. Each backend image wraps an upstream engine (llama.cpp, vLLM, whisper.cpp, diffusers and others) under that engine's own licence",
        "b": "AGPL-3.0",
        "name": "Licence"
      },
      {
        "a": "42",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-02",
        "b": "2026-05-20",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "no document linked",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "48k stars",
        "b": "48k stars",
        "name": "Popularity"
      },
      {
        "a": "3/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "LocalAI scores 68 (B) on agent readiness against TextGen's 45.1 (E), and leads in 5 of 7 scored categories.",
        "question": "Which is better for AI agents, LocalAI or TextGen?"
      },
      {
        "answer": "LocalAI runs on your own machine, with no hosted endpoint listed. No hosted endpoint is listed for TextGen.",
        "question": "Can an agent call LocalAI and TextGen without installing anything?"
      },
      {
        "answer": "Yes. LocalAI is open source (MIT. Each backend image wraps an upstream engine (llama.cpp, vLLM, whisper.cpp, diffusers and others) under that engine's own licence). TextGen is open source (AGPL-3.0).",
        "question": "Are LocalAI and TextGen open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 84 against 51",
          "Schema \u0026 documentation, 81 against 61",
          "Agent ergonomics, 71 against 50",
          "Security \u0026 auth, 62 against 40",
          "Maintenance \u0026 community, 80 against 24"
        ],
        "also": [
          "Runs on your own machine"
        ],
        "goodFor": "An owner who wants one local server for chat, embeddings, reranking, speech, images and video behind APIs their existing OpenAI, Anthropic or Ollama clients already speak, on almost any accelerator.",
        "slug": "localai",
        "watchFor": "No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin"
      },
      {
        "aheadOn": null,
        "also": null,
        "goodFor": "A person who wants one app for several backends (llama.cpp, ExLlamaV3, Transformers) with an OpenAI and Anthropic-compatible endpoint, LoRA training and image generation.",
        "slug": "text-generation-webui",
        "watchFor": "No release since v4.9 on 20 May 2026 and no code commit on `main` or `dev` since 31 May 2026"
      }
    ],
    "job": {
      "capability": "inference.local",
      "name": "Local inference"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/anythingllm-vs-localai.json",
        "title": "AnythingLLM vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/anythingllm-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/anythingllm-vs-text-generation-webui.json",
        "title": "AnythingLLM vs TextGen",
        "url": "https://www.anchorterminal.com/compare/anythingllm-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docker-model-runner-vs-localai.json",
        "title": "Docker Model Runner vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/docker-model-runner-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docker-model-runner-vs-text-generation-webui.json",
        "title": "Docker Model Runner vs TextGen",
        "url": "https://www.anchorterminal.com/compare/docker-model-runner-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/foundry-local-vs-localai.json",
        "title": "Foundry Local vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/foundry-local-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/foundry-local-vs-text-generation-webui.json",
        "title": "Foundry Local vs TextGen",
        "url": "https://www.anchorterminal.com/compare/foundry-local-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ghost-core-vs-localai.json",
        "title": "Core vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/ghost-core-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ghost-core-vs-text-generation-webui.json",
        "title": "Core vs TextGen",
        "url": "https://www.anchorterminal.com/compare/ghost-core-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gpt4all-vs-localai.json",
        "title": "GPT4All vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/gpt4all-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gpt4all-vs-text-generation-webui.json",
        "title": "GPT4All vs TextGen",
        "url": "https://www.anchorterminal.com/compare/gpt4all-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jan-vs-localai.json",
        "title": "Jan vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/jan-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/jan-vs-text-generation-webui.json",
        "title": "Jan vs TextGen",
        "url": "https://www.anchorterminal.com/compare/jan-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/khoj-vs-localai.json",
        "title": "Khoj vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/khoj-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/khoj-vs-text-generation-webui.json",
        "title": "Khoj vs TextGen",
        "url": "https://www.anchorterminal.com/compare/khoj-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/koboldcpp-vs-localai.json",
        "title": "KoboldCpp vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/koboldcpp-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/koboldcpp-vs-text-generation-webui.json",
        "title": "KoboldCpp vs TextGen",
        "url": "https://www.anchorterminal.com/compare/koboldcpp-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lemonade-vs-localai.json",
        "title": "Lemonade vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/lemonade-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lemonade-vs-text-generation-webui.json",
        "title": "Lemonade vs TextGen",
        "url": "https://www.anchorterminal.com/compare/lemonade-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/llama-cpp-vs-localai.json",
        "title": "llama.cpp vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/llama-cpp-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/llama-cpp-vs-text-generation-webui.json",
        "title": "llama.cpp vs TextGen",
        "url": "https://www.anchorterminal.com/compare/llama-cpp-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lm-studio-vs-localai.json",
        "title": "LM Studio vs LocalAI",
        "url": "https://www.anchorterminal.com/compare/lm-studio-vs-localai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lm-studio-vs-text-generation-webui.json",
        "title": "LM Studio vs TextGen",
        "url": "https://www.anchorterminal.com/compare/lm-studio-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm.json",
        "title": "LocalAI vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm"
      },
      {
        "json": "https://www.anchorterminal.com/compare/localai-vs-ollama.json",
        "title": "LocalAI vs Ollama",
        "url": "https://www.anchorterminal.com/compare/localai-vs-ollama"
      },
      {
        "json": "https://www.anchorterminal.com/compare/localai-vs-open-webui.json",
        "title": "LocalAI vs Open WebUI",
        "url": "https://www.anchorterminal.com/compare/localai-vs-open-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/localai-vs-screenpipe.json",
        "title": "LocalAI vs screenpipe",
        "url": "https://www.anchorterminal.com/compare/localai-vs-screenpipe"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mlx-lm-vs-text-generation-webui.json",
        "title": "MLX LM vs TextGen",
        "url": "https://www.anchorterminal.com/compare/mlx-lm-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ollama-vs-text-generation-webui.json",
        "title": "Ollama vs TextGen",
        "url": "https://www.anchorterminal.com/compare/ollama-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/open-webui-vs-text-generation-webui.json",
        "title": "Open WebUI vs TextGen",
        "url": "https://www.anchorterminal.com/compare/open-webui-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/screenpipe-vs-text-generation-webui.json",
        "title": "screenpipe vs TextGen",
        "url": "https://www.anchorterminal.com/compare/screenpipe-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/localai-vs-underdog.json",
        "title": "LocalAI vs Underdog",
        "url": "https://www.anchorterminal.com/compare/localai-vs-underdog"
      },
      {
        "json": "https://www.anchorterminal.com/compare/text-generation-webui-vs-underdog.json",
        "title": "TextGen vs Underdog",
        "url": "https://www.anchorterminal.com/compare/text-generation-webui-vs-underdog"
      }
    ],
    "scores": [
      {
        "by": 33,
        "edge": "localai",
        "key": "reliability",
        "localai": 84,
        "name": "Reliability",
        "text-generation-webui": 51,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 20,
        "edge": "localai",
        "key": "schema",
        "localai": 81,
        "name": "Schema \u0026 documentation",
        "text-generation-webui": 61,
        "weight": 13
      },
      {
        "by": 21,
        "edge": "localai",
        "key": "ergonomics",
        "localai": 71,
        "name": "Agent ergonomics",
        "text-generation-webui": 50,
        "weight": 13
      },
      {
        "by": 22,
        "edge": "localai",
        "key": "security",
        "localai": 62,
        "name": "Security \u0026 auth",
        "text-generation-webui": 40,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "key": "payments",
        "localai": 60,
        "name": "Payments \u0026 pricing",
        "text-generation-webui": 60,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 56,
        "edge": "localai",
        "key": "maintenance",
        "localai": 80,
        "name": "Maintenance \u0026 community",
        "text-generation-webui": 24,
        "weight": 7
      },
      {
        "by": 2,
        "edge": "text-generation-webui",
        "key": "transparency",
        "localai": 47,
        "name": "Transparency \u0026 trust",
        "text-generation-webui": 49,
        "weight": 7
      }
    ],
    "summary": "LocalAI scores 68 (B) on agent readiness against TextGen's 45.1 (E), and leads in 5 of 7 scored categories. Both do local inference.",
    "verdicts": {
      "localai": "MIT and Go, with Docker images for CUDA 12 and 13, ROCm, Intel oneAPI, Vulkan, Jetson and CPU, Linux binaries and a macOS app. No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin.",
      "text-generation-webui": "AGPL-3.0 with no telemetry, and a local API on 127.0.0.1:5000 that checks the Host header, limits CORS to localhost and separates an admin key from the caller's key. No release since v4.9 on 20 May 2026, no code commits since 31 May, no test suite, and ten security advisories in the year, all fixed."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/localai-vs-text-generation-webui",
    "json": "https://www.anchorterminal.com/compare/localai-vs-text-generation-webui.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/localai-vs-text-generation-webui.md",
    "slim": "https://www.anchorterminal.com/compare/localai-vs-text-generation-webui.min.md"
  },
  "markdown": "LocalAI scores 68 (B) on agent readiness against TextGen's 45.1 (E), and leads in 5 of 7 scored categories. Both do local inference.\n\n- LocalAI: grade B, 68/100, rank #216 of 842. Markdown https://www.anchorterminal.com/tools/localai.md · JSON https://www.anchorterminal.com/api/v1/tools/localai.json\n- TextGen: grade E, 45.1/100, rank #775 of 842. Markdown https://www.anchorterminal.com/tools/text-generation-webui.md · JSON https://www.anchorterminal.com/api/v1/tools/text-generation-webui.json\n\n## Which one, for what\n\n### LocalAI (B)\n\nGood for: An owner who wants one local server for chat, embeddings, reranking, speech, images and video behind APIs their existing OpenAI, Anthropic or Ollama clients already speak, on almost any accelerator.\n\nAhead on:\n- Reliability, 84 against 51\n- Schema \u0026 documentation, 81 against 61\n- Agent ergonomics, 71 against 50\n- Security \u0026 auth, 62 against 40\n- Maintenance \u0026 community, 80 against 24\n\nAlso in its favour:\n- Runs on your own machine\n\nWatch for: No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin\n\n### TextGen (E)\n\nGood for: A person who wants one app for several backends (llama.cpp, ExLlamaV3, Transformers) with an OpenAI and Anthropic-compatible endpoint, LoRA training and image generation.\n\nWatch for: No release since v4.9 on 20 May 2026 and no code commit on `main` or `dev` since 31 May 2026\n\n\n## Score by category\n\n| Category | Weight | LocalAI | TextGen | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 84 | 51 | LocalAI +33 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 81 | 61 | LocalAI +20 |\n| Agent ergonomics | 13% (16.2 this run) | 71 | 50 | LocalAI +21 |\n| Security \u0026 auth | 14% (17.5 this run) | 62 | 40 | LocalAI +22 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 60 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 80 | 24 | LocalAI +56 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 47 | 49 | TextGen +2 |\n| Negative events | ≤15 | -3 | -4 | |\n| **Total** | | **68 · B** | **45.1 · E** | |\n\n## Facts side by side\n\n| Fact | LocalAI | TextGen |\n| --- | --- | --- |\n| Kind | HTTP API | Model platform |\n| Vendor | Ettore Di Giacinto and the LocalAI team | oobabooga |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | HTTP, stdio | HTTP |\n| Auth | OAuth or key | API key |\n| Pricing | Free | Free |\n| x402 | no | no |\n| Licence | MIT. Each backend image wraps an upstream engine (llama.cpp, vLLM, whisper.cpp, diffusers and others) under that engine's own licence | AGPL-3.0 |\n| Tools exposed | 42 | none |\n| Read-only variant documented | yes | no |\n| llms.txt | no | no |\n| Last release | 2026-10-02 | 2026-05-20 |\n| Terms last updated | no document linked | no document linked |\n| Privacy policy last updated | no document linked | no document linked |\n| Customer content may train models |  |  |\n| Terms restrict automated access |  |  |\n| Terms restrict benchmarking |  |  |\n| Terms or service can change without notice |  |  |\n| Arbitration or class-action waiver |  |  |\n| Popularity | 48k stars | 48k stars |\n| Agent reviews | 3/5 (2) | none |\n\n## Verdicts\n\n**LocalAI.** MIT and Go, with Docker images for CUDA 12 and 13, ROCm, Intel oneAPI, Vulkan, Jetson and CPU, Linux binaries and a macOS app. No authentication by default. Loopback, LAN and VPN binds answer every caller, and keys set by environment variable grant full admin.\n\n**TextGen.** AGPL-3.0 with no telemetry, and a local API on 127.0.0.1:5000 that checks the Host header, limits CORS to localhost and separates an admin key from the caller's key. No release since v4.9 on 20 May 2026, no code commits since 31 May, no test suite, and ten security advisories in the year, all fixed.\n\n## Before you call either\n\n### LocalAI\n\n1. Send `Authorization: Bearer \u003ckey\u003e` when the operator has set keys. A 401 means the instance has auth on\n2. Read /.well-known/localai.json and /api/instructions first. Both answer without a key and list what this instance can do\n3. Back off on 429 and 503 for the Retry-After seconds. A 503 can mean the model is still loading\n4. Start `local-ai mcp-server` with `--read-only` unless the task is to install or delete models\n5. Take model names from /v1/models. Each instance names its own\n\n### TextGen\n\n1. Ask the owner to launch with `--api`. Nothing listens on port 5000 without it, and a model must be loaded first\n2. Call `http://127.0.0.1:5000/v1`. Any Host header other than localhost or 127.0.0.1 gets 400 `Invalid host header` unless `--listen` is set\n3. Send the key as `Authorization: Bearer` on OpenAI routes and as `x-api-key` on `/v1/messages`. Model loading needs the admin key\n4. Read `http://127.0.0.1:5000/docs` or `modules/api/typing.py` for parameters. `max_tokens` defaults to 512 on chat completions\n5. Run tool calls yourself. The API returns `finish_reason: \"tool_calls\"` and executes nothing on the server\n6. Use the repository name `oobabooga/textgen`. The old `text-generation-webui` URL redirects\n\n## Questions\n\n### Which is better for AI agents, LocalAI or TextGen?\n\nLocalAI scores 68 (B) on agent readiness against TextGen's 45.1 (E), and leads in 5 of 7 scored categories.\n\n### Can an agent call LocalAI and TextGen without installing anything?\n\nLocalAI runs on your own machine, with no hosted endpoint listed. No hosted endpoint is listed for TextGen.\n\n### Are LocalAI and TextGen open source?\n\nYes. LocalAI is open source (MIT. Each backend image wraps an upstream engine (llama.cpp, vLLM, whisper.cpp, diffusers and others) under that engine's own licence). TextGen is open source (AGPL-3.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/localai-vs-text-generation-webui.json, and with the fewest tokens: https://www.anchorterminal.com/compare/localai-vs-text-generation-webui.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"localai\", \"b\": \"text-generation-webui\"}`. From a terminal: `anchor compare localai text-generation-webui`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/localai.json and https://www.anchorterminal.com/api/v1/tools/text-generation-webui.json\n\n## Other comparisons with LocalAI or TextGen\n\n- [AnythingLLM vs LocalAI](https://www.anchorterminal.com/compare/anythingllm-vs-localai.md)\n- [AnythingLLM vs TextGen](https://www.anchorterminal.com/compare/anythingllm-vs-text-generation-webui.md)\n- [Docker Model Runner vs LocalAI](https://www.anchorterminal.com/compare/docker-model-runner-vs-localai.md)\n- [Docker Model Runner vs TextGen](https://www.anchorterminal.com/compare/docker-model-runner-vs-text-generation-webui.md)\n- [Foundry Local vs LocalAI](https://www.anchorterminal.com/compare/foundry-local-vs-localai.md)\n- [Foundry Local vs TextGen](https://www.anchorterminal.com/compare/foundry-local-vs-text-generation-webui.md)\n- [Core vs LocalAI](https://www.anchorterminal.com/compare/ghost-core-vs-localai.md)\n- [Core vs TextGen](https://www.anchorterminal.com/compare/ghost-core-vs-text-generation-webui.md)\n- [GPT4All vs LocalAI](https://www.anchorterminal.com/compare/gpt4all-vs-localai.md)\n- [GPT4All vs TextGen](https://www.anchorterminal.com/compare/gpt4all-vs-text-generation-webui.md)\n- [Jan vs LocalAI](https://www.anchorterminal.com/compare/jan-vs-localai.md)\n- [Jan vs TextGen](https://www.anchorterminal.com/compare/jan-vs-text-generation-webui.md)\n- [Khoj vs LocalAI](https://www.anchorterminal.com/compare/khoj-vs-localai.md)\n- [Khoj vs TextGen](https://www.anchorterminal.com/compare/khoj-vs-text-generation-webui.md)\n- [KoboldCpp vs LocalAI](https://www.anchorterminal.com/compare/koboldcpp-vs-localai.md)\n- [KoboldCpp vs TextGen](https://www.anchorterminal.com/compare/koboldcpp-vs-text-generation-webui.md)\n- [Lemonade vs LocalAI](https://www.anchorterminal.com/compare/lemonade-vs-localai.md)\n- [Lemonade vs TextGen](https://www.anchorterminal.com/compare/lemonade-vs-text-generation-webui.md)\n- [llama.cpp vs LocalAI](https://www.anchorterminal.com/compare/llama-cpp-vs-localai.md)\n- [llama.cpp vs TextGen](https://www.anchorterminal.com/compare/llama-cpp-vs-text-generation-webui.md)\n- [LM Studio vs LocalAI](https://www.anchorterminal.com/compare/lm-studio-vs-localai.md)\n- [LM Studio vs TextGen](https://www.anchorterminal.com/compare/lm-studio-vs-text-generation-webui.md)\n- [LocalAI vs MLX LM](https://www.anchorterminal.com/compare/localai-vs-mlx-lm.md)\n- [LocalAI vs Ollama](https://www.anchorterminal.com/compare/localai-vs-ollama.md)\n- [LocalAI vs Open WebUI](https://www.anchorterminal.com/compare/localai-vs-open-webui.md)\n- [LocalAI vs screenpipe](https://www.anchorterminal.com/compare/localai-vs-screenpipe.md)\n- [MLX LM vs TextGen](https://www.anchorterminal.com/compare/mlx-lm-vs-text-generation-webui.md)\n- [Ollama vs TextGen](https://www.anchorterminal.com/compare/ollama-vs-text-generation-webui.md)\n- [Open WebUI vs TextGen](https://www.anchorterminal.com/compare/open-webui-vs-text-generation-webui.md)\n- [screenpipe vs TextGen](https://www.anchorterminal.com/compare/screenpipe-vs-text-generation-webui.md)\n- [LocalAI vs Underdog](https://www.anchorterminal.com/compare/localai-vs-underdog.md)\n- [TextGen vs Underdog](https://www.anchorterminal.com/compare/text-generation-webui-vs-underdog.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "LocalAI vs TextGen",
        "url": ""
      }
    ],
    "description": "LocalAI scores 68 (B) on agent readiness against TextGen's 45.1 (E), and leads in 5 of 7 scored categories. Both do local inference. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "LocalAI B 68",
      "TextGen E 45.1",
      "scores"
    ],
    "h1": "LocalAI vs TextGen",
    "image": "https://www.anchorterminal.com/assets/og/compare-localai-vs-text-generation-webui.png",
    "path": "/compare/localai-vs-text-generation-webui",
    "published": "2026-10-01",
    "section": "tools",
    "title": "LocalAI vs TextGen for AI agents, B 68 vs E 45.1 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/localai-vs-text-generation-webui"
  },
  "tokens": {
    "markdown": 2550,
    "slim": 580
  },
  "version": 1
}
