{
  "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 MLX LM's 52.2 (D), and leads in 5 of 7 scored categories. MLX LM leads on transparency \u0026 trust.",
    "b": {
      "slug": "mlx-lm",
      "name": "MLX LM",
      "vendor": "Apple Inc.",
      "vendorUrl": "https://opensource.apple.com/projects/mlx/",
      "kind": "http-api",
      "category": "local-ai",
      "summary": "Open-source Python package and command-line tools from Apple's MLX team for running, quantising and fine-tuning language models on Apple silicon. `mlx_lm.server` exposes a local HTTP API modelled on OpenAI's chat completions.",
      "url": "https://www.anchorterminal.com/tools/mlx-lm",
      "markdownUrl": "https://www.anchorterminal.com/tools/mlx-lm.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/mlx-lm.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/mlx-lm.json",
      "repo": "https://github.com/ml-explore/mlx-lm",
      "license": "MIT",
      "transports": [
        "http"
      ],
      "packages": [
        {
          "registry": "pypi",
          "name": "mlx-lm"
        }
      ],
      "auth": "none",
      "authNotes": "No credential, and no option to add one. `mlx_lm.server` binds 127.0.0.1:8080 by default, and `--allowed-origins` defaults to `*`, so any origin's requests are answered. Access control is left to the network or a proxy in front (https://github.com/ml-explore/mlx-lm/blob/main/mlx_lm/SERVER.md).",
      "pricing": "free",
      "pricingNotes": "Free under MIT, with no account, key or card. Nothing is sold. The owner pays for the hardware and electricity.",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or the source (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 7300,
        "npmWeekly": null,
        "pypiWeekly": 139915,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://github.com/ml-explore/mlx-lm/blob/main/mlx_lm/SERVER.md",
      "capabilities": [
        "inference.local",
        "inference.open-weights"
      ],
      "tags": [
        "open-source",
        "local",
        "self-hosted",
        "free",
        "no-card",
        "openai-compatible",
        "python",
        "pre-1.0",
        "no-auth",
        "no-telemetry"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 52.2,
        "grade": "D",
        "agentReady": false,
        "rank": 657,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 12,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 54,
          "maintenance": 61,
          "payments": 60,
          "reliability": 66,
          "schema": 37,
          "security": 32,
          "transparency": 66
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "MIT, with no telemetry found in the source, and the tests passed on the last eight pushes to main. `mlx_lm.server` has no API key option, answers any origin by default and loads whichever model a request names, and its own docs say it is not recommended for production.",
        "bestFor": "An owner with an Apple silicon Mac who wants MLX-format models, local fine-tuning and quantisation from Python or the command line, with a simple local chat completions server.",
        "strengths": [
          "MIT, with no telemetry, analytics or update check found in the source",
          "Installs from PyPI (`mlx-lm` 0.32.0, Python 3.11 or later) and conda-forge, with releases published to PyPI by trusted publishing from a GitHub workflow",
          "The Build and Test workflow passed on the last eight pushes to main, with 21 test files run on a macOS runner",
          "`mlx_lm.server` binds 127.0.0.1:8080 by default, caps output at 512 tokens unless told otherwise and validates field types and ranges with a 400",
          "127 commits from 82 authors on main in the 90 days to 8 October 2026"
        ],
        "weaknesses": [
          "`mlx_lm.server` has no API key or other credential option, and `--allowed-origins` defaults to `*`",
          "A request's `model` and `adapters` fields make the server download or load any Hugging Face repository or local path, with no allow-list (open issue #1892)",
          "The docs and a start-up warning say the server is not recommended for production because it has only basic security checks",
          "No OpenAPI file or llms.txt, and `SERVER.md` leaves out `tools`, `seed`, `/health` and the error responses",
          "One PyPI release in 90 days (0.32.0 on 1 October 2026, the first since 0.31.3 on 22 April), and the version is still 0.x"
        ],
        "agentNotes": [
          "Keep `mlx_lm.server` on 127.0.0.1 and pass `--allowed-origins` with the origins you trust. There is no API key, and the default answers every origin",
          "Treat any caller as able to load any model. The `model` and `adapters` request fields accept any Hugging Face repository or local path",
          "Send `max_tokens` or `max_completion_tokens` when you need more than 512 tokens, the server default",
          "Read errors as `{\"error\": \"\u003ctext\u003e\"}` with 400 for a bad field and 404 for a model that failed to load. They are not OpenAI error objects",
          "Poll `GET /health` before the first request. It answers 503 with `unavailable` when the generation thread has stopped"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 52.2
          }
        ],
        "editorialScores": {
          "ergonomics": 54,
          "maintenance": 61,
          "payments": 60,
          "reliability": 66,
          "schema": 37,
          "security": 32,
          "transparency": 65
        },
        "provenanceScore": 67
      },
      "connect": {
        "install": "pip install mlx-lm\nmlx_lm.server --model mlx-community/Mistral-7B-Instruct-v0.3-4bit   # listens on 127.0.0.1:8080",
        "http": "curl localhost:8080/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n     \"messages\": [{\"role\": \"user\", \"content\": \"Say this is a test!\"}],\n     \"temperature\": 0.7\n   }'"
      },
      "letme": {
        "capability": "https://letme.dev/inference.local",
        "tool": "https://letme.dev/mlx-lm"
      },
      "area": "models",
      "provenance": {
        "legalEntity": "Apple Inc.",
        "domain": "apple.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/ml-explore/mlx-lm/releases",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The `LICENSE` file reads Copyright 2023 Apple Inc., and the package author on PyPI is MLX Contributors at a group.apple.com address. The repository sits in GitHub's ml-explore organisation and has no website of its own.",
          "opensource.apple.com/projects/mlx describes the MLX framework and does not name MLX LM. Its footer links Apple's website terms and general privacy policy, which do not govern this software, so terms and privacy are left empty.",
          "www.apple.com/.well-known/security.txt is valid until 6 October 2027 and is Apple's corporate file. The repository's own policy takes reports through GitHub private vulnerability reporting.",
          "There is no shared hosted endpoint. The server runs on the owner's machine."
        ],
        "score": 67
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/mlx-lm.json"
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Ettore Di Giacinto and the LocalAI team",
        "b": "Apple Inc.",
        "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": "None",
        "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": "MIT",
        "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-10-01",
        "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": "7.3k stars, 140k PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "3/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "LocalAI scores 68 (B) on agent readiness against MLX LM's 52.2 (D), and leads in 5 of 7 scored categories. MLX LM leads on transparency \u0026 trust.",
        "question": "Which is better for AI agents, LocalAI or MLX LM?"
      },
      {
        "answer": "LocalAI takes an API key or an OAuth sign-in. MLX LM needs no key.",
        "question": "Do LocalAI and MLX LM need an API key?"
      },
      {
        "answer": "LocalAI runs on your own machine, with no hosted endpoint listed. No hosted endpoint is listed for MLX LM.",
        "question": "Can an agent call LocalAI and MLX LM 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). MLX LM is open source (MIT).",
        "question": "Are LocalAI and MLX LM open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 84 against 66",
          "Schema \u0026 documentation, 81 against 37",
          "Agent ergonomics, 71 against 54",
          "Security \u0026 auth, 62 against 32",
          "Maintenance \u0026 community, 80 against 61"
        ],
        "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": [
          "Transparency \u0026 trust, 66 against 47"
        ],
        "also": [
          "No key needed to call it",
          "No incidents deducted, where LocalAI loses 3 points for them"
        ],
        "goodFor": "An owner with an Apple silicon Mac who wants MLX-format models, local fine-tuning and quantisation from Python or the command line, with a simple local chat completions server.",
        "slug": "mlx-lm",
        "watchFor": "`mlx_lm.server` has no API key or other credential option, and `--allowed-origins` defaults to `*`"
      }
    ],
    "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-mlx-lm.json",
        "title": "AnythingLLM vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/anythingllm-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "Docker Model Runner vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/docker-model-runner-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "Foundry Local vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/foundry-local-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "Core vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/ghost-core-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "GPT4All vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/gpt4all-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "Jan vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/jan-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "Khoj vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/khoj-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "KoboldCpp vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/koboldcpp-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "Lemonade vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/lemonade-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "llama.cpp vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/llama-cpp-vs-mlx-lm"
      },
      {
        "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-mlx-lm.json",
        "title": "LM Studio vs MLX LM",
        "url": "https://www.anchorterminal.com/compare/lm-studio-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/localai-vs-text-generation-webui.json",
        "title": "LocalAI vs TextGen",
        "url": "https://www.anchorterminal.com/compare/localai-vs-text-generation-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mlx-lm-vs-ollama.json",
        "title": "MLX LM vs Ollama",
        "url": "https://www.anchorterminal.com/compare/mlx-lm-vs-ollama"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mlx-lm-vs-open-webui.json",
        "title": "MLX LM vs Open WebUI",
        "url": "https://www.anchorterminal.com/compare/mlx-lm-vs-open-webui"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mlx-lm-vs-screenpipe.json",
        "title": "MLX LM vs screenpipe",
        "url": "https://www.anchorterminal.com/compare/mlx-lm-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/localai-vs-underdog.json",
        "title": "LocalAI vs Underdog",
        "url": "https://www.anchorterminal.com/compare/localai-vs-underdog"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mlx-lm-vs-underdog.json",
        "title": "MLX LM vs Underdog",
        "url": "https://www.anchorterminal.com/compare/mlx-lm-vs-underdog"
      }
    ],
    "scores": [
      {
        "by": 18,
        "edge": "localai",
        "key": "reliability",
        "localai": 84,
        "mlx-lm": 66,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 44,
        "edge": "localai",
        "key": "schema",
        "localai": 81,
        "mlx-lm": 37,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 17,
        "edge": "localai",
        "key": "ergonomics",
        "localai": 71,
        "mlx-lm": 54,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 30,
        "edge": "localai",
        "key": "security",
        "localai": 62,
        "mlx-lm": 32,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "key": "payments",
        "localai": 60,
        "mlx-lm": 60,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 19,
        "edge": "localai",
        "key": "maintenance",
        "localai": 80,
        "mlx-lm": 61,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 19,
        "edge": "mlx-lm",
        "key": "transparency",
        "localai": 47,
        "mlx-lm": 66,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "LocalAI scores 68 (B) on agent readiness against MLX LM's 52.2 (D), and leads in 5 of 7 scored categories. MLX LM leads on transparency \u0026 trust. 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.",
      "mlx-lm": "MIT, with no telemetry found in the source, and the tests passed on the last eight pushes to main. `mlx_lm.server` has no API key option, answers any origin by default and loads whichever model a request names, and its own docs say it is not recommended for production."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm",
    "json": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm.md",
    "slim": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm.min.md"
  },
  "markdown": "LocalAI scores 68 (B) on agent readiness against MLX LM's 52.2 (D), and leads in 5 of 7 scored categories. MLX LM leads on transparency \u0026 trust. 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- MLX LM: grade D, 52.2/100, rank #657 of 842. Markdown https://www.anchorterminal.com/tools/mlx-lm.md · JSON https://www.anchorterminal.com/api/v1/tools/mlx-lm.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 66\n- Schema \u0026 documentation, 81 against 37\n- Agent ergonomics, 71 against 54\n- Security \u0026 auth, 62 against 32\n- Maintenance \u0026 community, 80 against 61\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### MLX LM (D)\n\nGood for: An owner with an Apple silicon Mac who wants MLX-format models, local fine-tuning and quantisation from Python or the command line, with a simple local chat completions server.\n\nAhead on:\n- Transparency \u0026 trust, 66 against 47\n\nAlso in its favour:\n- No key needed to call it\n- No incidents deducted, where LocalAI loses 3 points for them\n\nWatch for: `mlx_lm.server` has no API key or other credential option, and `--allowed-origins` defaults to `*`\n\n\n## Score by category\n\n| Category | Weight | LocalAI | MLX LM | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 84 | 66 | LocalAI +18 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 81 | 37 | LocalAI +44 |\n| Agent ergonomics | 13% (16.2 this run) | 71 | 54 | LocalAI +17 |\n| Security \u0026 auth | 14% (17.5 this run) | 62 | 32 | LocalAI +30 |\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 | 61 | LocalAI +19 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 47 | 66 | MLX LM +19 |\n| Negative events | ≤15 | -3 | 0 | |\n| **Total** | | **68 · B** | **52.2 · D** | |\n\n## Facts side by side\n\n| Fact | LocalAI | MLX LM |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Ettore Di Giacinto and the LocalAI team | Apple Inc. |\n| Hosted endpoint | no (local only) | no (local only) |\n| Transports | HTTP, stdio | HTTP |\n| Auth | OAuth or key | None |\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 | MIT |\n| Tools exposed | 42 | none |\n| Read-only variant documented | yes | no |\n| llms.txt | no | no |\n| Last release | 2026-10-02 | 2026-10-01 |\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 | 7.3k stars, 140k PyPI/wk |\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**MLX LM.** MIT, with no telemetry found in the source, and the tests passed on the last eight pushes to main. `mlx_lm.server` has no API key option, answers any origin by default and loads whichever model a request names, and its own docs say it is not recommended for production.\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### MLX LM\n\n1. Keep `mlx_lm.server` on 127.0.0.1 and pass `--allowed-origins` with the origins you trust. There is no API key, and the default answers every origin\n2. Treat any caller as able to load any model. The `model` and `adapters` request fields accept any Hugging Face repository or local path\n3. Send `max_tokens` or `max_completion_tokens` when you need more than 512 tokens, the server default\n4. Read errors as `{\"error\": \"\u003ctext\u003e\"}` with 400 for a bad field and 404 for a model that failed to load. They are not OpenAI error objects\n5. Poll `GET /health` before the first request. It answers 503 with `unavailable` when the generation thread has stopped\n\n## Questions\n\n### Which is better for AI agents, LocalAI or MLX LM?\n\nLocalAI scores 68 (B) on agent readiness against MLX LM's 52.2 (D), and leads in 5 of 7 scored categories. MLX LM leads on transparency \u0026 trust.\n\n### Do LocalAI and MLX LM need an API key?\n\nLocalAI takes an API key or an OAuth sign-in. MLX LM needs no key.\n\n### Can an agent call LocalAI and MLX LM without installing anything?\n\nLocalAI runs on your own machine, with no hosted endpoint listed. No hosted endpoint is listed for MLX LM.\n\n### Are LocalAI and MLX LM 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). MLX LM is open source (MIT).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/localai-vs-mlx-lm.json, and with the fewest tokens: https://www.anchorterminal.com/compare/localai-vs-mlx-lm.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"localai\", \"b\": \"mlx-lm\"}`. From a terminal: `anchor compare localai mlx-lm`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/localai.json and https://www.anchorterminal.com/api/v1/tools/mlx-lm.json\n\n## Other comparisons with LocalAI or MLX LM\n\n- [AnythingLLM vs LocalAI](https://www.anchorterminal.com/compare/anythingllm-vs-localai.md)\n- [AnythingLLM vs MLX LM](https://www.anchorterminal.com/compare/anythingllm-vs-mlx-lm.md)\n- [Docker Model Runner vs LocalAI](https://www.anchorterminal.com/compare/docker-model-runner-vs-localai.md)\n- [Docker Model Runner vs MLX LM](https://www.anchorterminal.com/compare/docker-model-runner-vs-mlx-lm.md)\n- [Foundry Local vs LocalAI](https://www.anchorterminal.com/compare/foundry-local-vs-localai.md)\n- [Foundry Local vs MLX LM](https://www.anchorterminal.com/compare/foundry-local-vs-mlx-lm.md)\n- [Core vs LocalAI](https://www.anchorterminal.com/compare/ghost-core-vs-localai.md)\n- [Core vs MLX LM](https://www.anchorterminal.com/compare/ghost-core-vs-mlx-lm.md)\n- [GPT4All vs LocalAI](https://www.anchorterminal.com/compare/gpt4all-vs-localai.md)\n- [GPT4All vs MLX LM](https://www.anchorterminal.com/compare/gpt4all-vs-mlx-lm.md)\n- [Jan vs LocalAI](https://www.anchorterminal.com/compare/jan-vs-localai.md)\n- [Jan vs MLX LM](https://www.anchorterminal.com/compare/jan-vs-mlx-lm.md)\n- [Khoj vs LocalAI](https://www.anchorterminal.com/compare/khoj-vs-localai.md)\n- [Khoj vs MLX LM](https://www.anchorterminal.com/compare/khoj-vs-mlx-lm.md)\n- [KoboldCpp vs LocalAI](https://www.anchorterminal.com/compare/koboldcpp-vs-localai.md)\n- [KoboldCpp vs MLX LM](https://www.anchorterminal.com/compare/koboldcpp-vs-mlx-lm.md)\n- [Lemonade vs LocalAI](https://www.anchorterminal.com/compare/lemonade-vs-localai.md)\n- [Lemonade vs MLX LM](https://www.anchorterminal.com/compare/lemonade-vs-mlx-lm.md)\n- [llama.cpp vs LocalAI](https://www.anchorterminal.com/compare/llama-cpp-vs-localai.md)\n- [llama.cpp vs MLX LM](https://www.anchorterminal.com/compare/llama-cpp-vs-mlx-lm.md)\n- [LM Studio vs LocalAI](https://www.anchorterminal.com/compare/lm-studio-vs-localai.md)\n- [LM Studio vs MLX LM](https://www.anchorterminal.com/compare/lm-studio-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- [LocalAI vs TextGen](https://www.anchorterminal.com/compare/localai-vs-text-generation-webui.md)\n- [MLX LM vs Ollama](https://www.anchorterminal.com/compare/mlx-lm-vs-ollama.md)\n- [MLX LM vs Open WebUI](https://www.anchorterminal.com/compare/mlx-lm-vs-open-webui.md)\n- [MLX LM vs screenpipe](https://www.anchorterminal.com/compare/mlx-lm-vs-screenpipe.md)\n- [MLX LM vs TextGen](https://www.anchorterminal.com/compare/mlx-lm-vs-text-generation-webui.md)\n- [LocalAI vs Underdog](https://www.anchorterminal.com/compare/localai-vs-underdog.md)\n- [MLX LM vs Underdog](https://www.anchorterminal.com/compare/mlx-lm-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 MLX LM",
        "url": ""
      }
    ],
    "description": "LocalAI scores 68 (B) on agent readiness against MLX LM's 52.2 (D), and leads in 5 of 7 scored categories. MLX LM leads on transparency \u0026 trust. Both do local inference. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "LocalAI B 68",
      "MLX LM D 52.2",
      "scores"
    ],
    "h1": "LocalAI vs MLX LM",
    "image": "https://www.anchorterminal.com/assets/og/compare-localai-vs-mlx-lm.png",
    "path": "/compare/localai-vs-mlx-lm",
    "published": "2026-10-01",
    "section": "tools",
    "title": "LocalAI vs MLX LM for AI agents, B 68 vs D 52.2 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/localai-vs-mlx-lm"
  },
  "tokens": {
    "markdown": 2500,
    "slim": 630
  },
  "version": 1
}
