5 min read

AnythingLLM: Private Chat With Your Own Documents (GitHub, Scanned)

Private chat over your own documents, as a desktop app or a Docker container, with agents and multi-user support.

AnythingLLM repository on GitHub

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.

🔍
Scan: clean, read the notes. Nothing malicious, but the highest count of known dependency advisories on the list, spread across the many provider SDKs it bundles. Run the current release and keep it behind a login.

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/download

2. 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/anythingllm

3. Open it, pick a model provider (the built-in one or Ollama), and create a workspace

open http://localhost:3001

Safety 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

CheckResult
Secrets1 candidate found and read; see the notes above.
Suspicious code10 pattern hits found and read; every one is listed under the raw findings.
Install-time code2 installer scripts
Committed binariesNone.
CI workflows9 workflows. None use pull_request_target. 10 of 16 third-party actions pinned to a tag rather than a commit.
Network hosts40 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 vulnerabilities398 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 hygieneHas security policy, licence file, contributing guide. Missing automated dependency updates, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

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

Secret candidates (1, redacted)
WhereRuleMatch
frontend/src/components/Modals/ManageWorkspace/DataConnectors/Connectors/Gitlab/index.jsx:114gitlab-tokenglpat-…XXX (26 chars)
Pattern hits (10)
WhereRuleMatch
cloud-deployments/openshift/Dockerfile:45download-piped-to-shellcurl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \
cloud-deployments/openshift/Dockerfile:123download-piped-to-shellcurl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \
docker/Dockerfile:33download-piped-to-shellcurl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \
docker/Dockerfile:102download-piped-to-shellcurl -LsSf https://astral.sh/uv/0.6.10/install.sh | sh && \
frontend/src/locales/da/common.js:217very-long-line11474 chars
frontend/src/locales/ja/common.js:1471very-long-line4016 chars
open-computer/cli/src/commands/build.ts:204persistence'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:67persistencesystemctl enable lightdm
open-computer/master/setup/provision.sh:98download-piped-to-shellcurl -fsSL https://deb.nodesource.com/setup_22.x | bash -
open-computer/master/setup/provision.sh:311persistencesystemctl enable open-computer-mount open-computer memory-manager
URLs to bare IP addresses (2)
WhereRuleMatch
collector/__tests__/utils/url/index.test.js:86ip-literal-urlexpect(validateURL("123")).toBe("https://0.0.0.123");
collector/__tests__/utils/url/index.test.js:87ip-literal-urlexpect(validateURL("123.123.123.123")).toBe("https://123.123.123.123");
Installer scripts (2)
Worst known vulnerabilities (24 of 398)
AdvisorySeverityPackageSummary
GHSA-5rq4-664w-9x2ccriticalbasic-ftp@5.0.5Basic FTP has Path Traversal Vulnerability in its downloadToDir() method
GHSA-mp2f-45pm-3cg9criticaldecompress@4.2.1Decompress: Archive extraction can create files and links outside of the target directory
GHSA-xq3m-2v4x-88ggcriticalprotobufjs@6.11.4Arbitrary code execution in protobufjs
GHSA-xq3m-2v4x-88ggcriticalprotobufjs@7.3.2Arbitrary code execution in protobufjs
GHSA-m7jm-9gc2-mpf2criticalfast-xml-parser@4.5.0fast-xml-parser has an entity encoding bypass via regex injection in DOCTYPE entity names
GHSA-h755-8qp9-cq85criticalprotobufjs@7.2.4protobufjs Prototype Pollution vulnerability
GHSA-xq3m-2v4x-88ggcriticalprotobufjs@7.2.4Arbitrary code execution in protobufjs
GHSA-r399-636x-v7f6high@langchain/core@0.2.36LangChain serialization injection vulnerability enables secret extraction
GHSA-r399-636x-v7f6high@langchain/core@0.1.63LangChain serialization injection vulnerability enables secret extraction
GHSA-27p8-2357-5qqvhigh@xmldom/xmldom@0.8.11xmldom: DocType `name` Injection Bypasses requireWellFormed
GHSA-2v35-w6hq-6mfwhigh@xmldom/xmldom@0.8.11xmldom: Uncontrolled recursion in XML serialization leads to DoS
GHSA-4w3w-2rp5-g8jmhigh@xmldom/xmldom@0.8.11xmldom: Attribute name injection via setAttribute() bypasses requireWellFormed
GHSA-8344-3jmq-59r6high@xmldom/xmldom@0.8.11xmldom: Quadratic-time attribute deduplication
GHSA-93r5-fhx6-vmg9high@xmldom/xmldom@0.8.11xmldom: Quadratic-time parsing via the malformed-input recovery path - `parseElementStartPart` re-scan and `normalize()`…
GHSA-965w-775f-mr7ghigh@xmldom/xmldom@0.8.11xmldom: Quadratic-memory consumption
GHSA-c7q8-3ch8-vqpvhigh@xmldom/xmldom@0.8.11xmldom: Processing Instruction Target Injection Bypasses requireWellFormed
GHSA-f6ww-3ggp-fr8hhigh@xmldom/xmldom@0.8.11xmldom has XML injection through unvalidated DocumentType serialization
GHSA-j759-j44w-7fr8high@xmldom/xmldom@0.8.11xmldom has XML node injection through unvalidated comment serialization
GHSA-w2rr-34g9-rvrjhigh@xmldom/xmldom@0.8.11xmldom: Element name injection via createElement() bypasses requireWellFormed
GHSA-wh4c-j3r5-mjhphigh@xmldom/xmldom@0.8.11xmldom: XML injection via unsafe CDATA serialization allows attacker-controlled markup insertion
GHSA-x4fp-j954-r2f4high@xmldom/xmldom@0.8.11xmldom: End-tag Whitespace-Trim Regex ReDoS - quadratic backtracking in the 0.8.x end-tag parser
GHSA-x6wf-f3px-wcqxhigh@xmldom/xmldom@0.8.11xmldom has XML node injection through unvalidated processing instruction serialization
GHSA-xcpc-8h2w-3j85highadm-zip@0.5.16adm-zip: Crafted ZIP file triggers 4GB memory allocation
GHSA-6v7q-wjvx-w8wghighbasic-ftp@5.0.5basic-ftp: Incomplete CRLF Injection Protection Allows Arbitrary FTP Command Execution via Credentials and MKD Commands

By the numbers

Stars66.1K
Forks7,343
Contributors246
Commits2,383
Open issues296
Open pull requests29
Releases35
Latest releasev1.16.1
LicenceMIT
Main languageJavaScript
Project age3 years
Last pushSep 16, 2026
Tracked files5,681
Lines of code298.1K
Checkout size59 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.