AnythingLLM is the tool for the person whose first question about AI is: can it read my files? It ingests PDFs, Office documents, web pages, YouTube transcripts and whole GitHub repositories into workspaces, embeds them locally, and lets you chat with any model about them, with citations back to the source. The desktop app is a single download with a built-in model runner, so on a Mac or Windows PC there is nothing else to install.
The same code base runs as a Docker container for teams, adding accounts, workspace permissions, an API and embeddable chat widgets. It is MIT-licensed, built by Mintplex Labs in JavaScript, and unusually careful about defaults: everything, including the embedder and the vector database, runs locally unless you point it at a cloud provider.
- Repository: github.com/Mintplex-Labs/anything-llm
- Licence: MIT (MIT License)
- Language: JavaScript. Stars: 66.1K. Forks: 7,343. Last push: Sep 16, 2026.
- Scan: clean, read the notes, Sep 16, 2026, commit 65f83f3
Who it is for
Professionals with a folder of documents they want to question rather than reread, small teams that need a shared, private knowledge base with a chat front end, and anyone who wants RAG without learning what RAG stands for.
Getting started
1. Desktop: download the installer for macOS, Windows or Linux
open https://anythingllm.com/download2. Server: run the Docker image with a persistent storage folder (SYS_ADMIN is for its headless browser)
export STORAGE_LOCATION=$HOME/anythingllm && mkdir -p $STORAGE_LOCATION && touch "$STORAGE_LOCATION/.env" && docker run -d -p 3001:3001 --cap-add SYS_ADMIN -v ${STORAGE_LOCATION}:/app/server/storage -v ${STORAGE_LOCATION}/.env:/app/server/.env -e STORAGE_DIR="/app/server/storage" mintplexlabs/anythingllm3. Open it, pick a model provider (the built-in one or Ollama), and create a workspace
open http://localhost:3001Safety scan
We cloned Mintplex-Labs/anything-llm at commit 65f83f3 on Sep 16, 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: the one candidate is the glpat- placeholder text in the GitLab connector's input field. No self-decoding code. The bare-IP hits are test values.
- The pattern hits are Dockerfiles installing uv at a pinned version, two translation files with very long lines, and provisioning scripts in open-computer, a newer sub-project that sets up a VM with systemd services. None of it runs on a desktop install.
- Known advisories are the note: several hundred across the server, collector and frontend lockfiles, with critical entries in protobufjs, fast-xml-parser, decompress and basic-ftp. Most are transitive dependencies of cloud and vector database SDKs that load only when you configure that provider, and the frontend's are build-time. It is still the longest list here, and the reason to run the current release rather than an old one.
- Nine workflows, none using pull_request_target; 6 of 16 third-party actions pinned to a commit. Security policy, licence and contributing guide present; no Dependabot or CodeQL.
- The Docker image asks for the SYS_ADMIN capability, which its headless browser needs for scraping web pages. The desktop app bundles its own model runner and keeps everything under your user folder.
What the scanner counted
| Check | Result |
|---|---|
| Secrets | 1 candidate found and read; see the notes above. |
| Suspicious code | 10 pattern hits found and read; every one is listed under the raw findings. |
| Install-time code | 2 installer scripts |
| Committed binaries | None. |
| CI workflows | 9 workflows. None use pull_request_target. 10 of 16 third-party actions pinned to a tag rather than a commit. |
| Network hosts | 40 distinct hosts referenced from source; most often gitlab.example.com, github.com, git.example.com, github.mycompany.com. 2 URLs to a bare IP address, listed under the raw findings. |
| Known vulnerabilities | 398 advisories across 1,804 pinned packages: 7 critical, 182 high, 173 moderate, 36 low. collector/yarn.lock: 633 packages, 133 advisories; frontend/yarn.lock: 733 packages, 114 advisories; open-computer/cli/package-lock.json: 50 packages, 0 advisories; open-computer/services/interface-service/package-lock.json: 108 packages, 4 advisories; open-computer/services/memory-manager/package-lock.json: 67 packages, 2 advisories; server/yarn.lock: 1,069 packages, 213 advisories. |
| Project hygiene | Has security policy, licence file, contributing guide. Missing automated dependency updates, CodeQL. |
| 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.
Secret candidates (1, redacted)
| Where | Rule | Match |
|---|---|---|
| frontend/src/components/Modals/ManageWorkspace/DataConnectors/Connectors/Gitlab/index.jsx:114 | gitlab-token | glpat-…XXX (26 chars) |
Pattern hits (10)
| Where | Rule | Match |
|---|---|---|
| cloud-deployments/openshift/Dockerfile:45 | download-piped-to-shell | curl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \ |
| cloud-deployments/openshift/Dockerfile:123 | download-piped-to-shell | curl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \ |
| docker/Dockerfile:33 | download-piped-to-shell | curl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \ |
| docker/Dockerfile:102 | download-piped-to-shell | curl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \ |
| frontend/src/locales/da/common.js:217 | very-long-line | 11474 chars |
| frontend/src/locales/ja/common.js:1471 | very-long-line | 4016 chars |
| open-computer/cli/src/commands/build.ts:204 | persistence | 'sudo systemctl daemon-reload && sudo systemctl enable open-computer-mount memory-manager && sudo systemctl restart open-computer memory-manager', |
| open-computer/master/setup/provision.sh:67 | persistence | systemctl enable lightdm |
| open-computer/master/setup/provision.sh:98 | download-piped-to-shell | curl -fsSL https://deb.nodesource.com/setup_22.x | bash - |
| open-computer/master/setup/provision.sh:311 | persistence | systemctl enable open-computer-mount open-computer memory-manager |
URLs to bare IP addresses (2)
| Where | Rule | Match |
|---|---|---|
| collector/__tests__/utils/url/index.test.js:86 | ip-literal-url | expect(validateURL("123")).toBe("https://0.0.0.123"); |
| collector/__tests__/utils/url/index.test.js:87 | ip-literal-url | expect(validateURL("123.123.123.123")).toBe("https://123.123.123.123"); |
Installer scripts (2)
Worst known vulnerabilities (24 of 398)
| Advisory | Severity | Package | Summary |
|---|---|---|---|
| GHSA-5rq4-664w-9x2c | critical | basic-ftp@5.0.5 | Basic FTP has Path Traversal Vulnerability in its downloadToDir() method |
| GHSA-mp2f-45pm-3cg9 | critical | decompress@4.2.1 | Decompress: Archive extraction can create files and links outside of the target directory |
| GHSA-xq3m-2v4x-88gg | critical | protobufjs@6.11.4 | Arbitrary code execution in protobufjs |
| GHSA-xq3m-2v4x-88gg | critical | protobufjs@7.3.2 | Arbitrary code execution in protobufjs |
| GHSA-m7jm-9gc2-mpf2 | critical | fast-xml-parser@4.5.0 | fast-xml-parser has an entity encoding bypass via regex injection in DOCTYPE entity names |
| GHSA-h755-8qp9-cq85 | critical | protobufjs@7.2.4 | protobufjs Prototype Pollution vulnerability |
| GHSA-xq3m-2v4x-88gg | critical | protobufjs@7.2.4 | Arbitrary code execution in protobufjs |
| GHSA-r399-636x-v7f6 | high | @langchain/core@0.2.36 | LangChain serialization injection vulnerability enables secret extraction |
| GHSA-r399-636x-v7f6 | high | @langchain/core@0.1.63 | LangChain serialization injection vulnerability enables secret extraction |
| GHSA-27p8-2357-5qqv | high | @xmldom/xmldom@0.8.11 | xmldom: DocType `name` Injection Bypasses requireWellFormed |
| GHSA-2v35-w6hq-6mfw | high | @xmldom/xmldom@0.8.11 | xmldom: Uncontrolled recursion in XML serialization leads to DoS |
| GHSA-4w3w-2rp5-g8jm | high | @xmldom/xmldom@0.8.11 | xmldom: Attribute name injection via setAttribute() bypasses requireWellFormed |
| GHSA-8344-3jmq-59r6 | high | @xmldom/xmldom@0.8.11 | xmldom: Quadratic-time attribute deduplication |
| GHSA-93r5-fhx6-vmg9 | high | @xmldom/xmldom@0.8.11 | xmldom: Quadratic-time parsing via the malformed-input recovery path - `parseElementStartPart` re-scan and `normalize()`… |
| GHSA-965w-775f-mr7g | high | @xmldom/xmldom@0.8.11 | xmldom: Quadratic-memory consumption |
| GHSA-c7q8-3ch8-vqpv | high | @xmldom/xmldom@0.8.11 | xmldom: Processing Instruction Target Injection Bypasses requireWellFormed |
| GHSA-f6ww-3ggp-fr8h | high | @xmldom/xmldom@0.8.11 | xmldom has XML injection through unvalidated DocumentType serialization |
| GHSA-j759-j44w-7fr8 | high | @xmldom/xmldom@0.8.11 | xmldom has XML node injection through unvalidated comment serialization |
| GHSA-w2rr-34g9-rvrj | high | @xmldom/xmldom@0.8.11 | xmldom: Element name injection via createElement() bypasses requireWellFormed |
| GHSA-wh4c-j3r5-mjhp | high | @xmldom/xmldom@0.8.11 | xmldom: XML injection via unsafe CDATA serialization allows attacker-controlled markup insertion |
| GHSA-x4fp-j954-r2f4 | high | @xmldom/xmldom@0.8.11 | xmldom: End-tag Whitespace-Trim Regex ReDoS - quadratic backtracking in the 0.8.x end-tag parser |
| GHSA-x6wf-f3px-wcqx | high | @xmldom/xmldom@0.8.11 | xmldom has XML node injection through unvalidated processing instruction serialization |
| GHSA-xcpc-8h2w-3j85 | high | adm-zip@0.5.16 | adm-zip: Crafted ZIP file triggers 4GB memory allocation |
| GHSA-6v7q-wjvx-w8wg | high | basic-ftp@5.0.5 | basic-ftp: Incomplete CRLF Injection Protection Allows Arbitrary FTP Command Execution via Credentials and MKD Commands |
By the numbers
| Stars | 66.1K |
|---|---|
| Forks | 7,343 |
| Contributors | 246 |
| Commits | 2,383 |
| Open issues | 296 |
| Open pull requests | 29 |
| Releases | 35 |
| Latest release | v1.16.1 |
| Licence | MIT |
| Main language | JavaScript |
| Project age | 3 years |
| Last push | Sep 16, 2026 |
| Tracked files | 5,681 |
| Lines of code | 298.1K |
| Checkout size | 59 MB |
Lines by language: JavaScript 271.9K, JSON 5,924, CSS 4,866, TypeScript 4,653, Markdown 3,758, HTML 2,135.
Questions
Is AnythingLLM free?
Yes. The desktop app and the self-hosted server are MIT-licensed and free, with no user limits. Mintplex Labs sells a hosted version and support for organisations that do not want to run it themselves.
Do my documents leave my computer?
Not unless you choose a cloud provider. The default embedder, vector store and, on desktop, the model all run locally. If you connect OpenAI, Anthropic or another API for the chat model, the chunks of your documents relevant to a question are sent with it, which is how retrieval works anywhere.
AnythingLLM or Open WebUI?
Both do chat with documents. AnythingLLM is organised around documents and workspaces and ships a desktop app; Open WebUI is organised around chat and models and runs as a server. Pick AnythingLLM if the files are the point and you want a desktop install, Open WebUI if you want the fuller chat interface and run Ollama already.
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.