* fix: scope thread lookup to validated workspace in middleware The validWorkspaceAndThreadSlug middleware validates workspace membership correctly but fetched threads without a workspace_id constraint, allowing a user removed from workspace-A to still access their thread history via any other workspace (workspace-B) they have access to. Add workspace_id: workspace.id to WorkspaceThread.get() so the thread must belong to the workspace the request is authorized for. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: FailSafe Researcher <joshua@getfailsafe.com> * add ability to toggle agent tools during an active agent session * rework mid-session tool toggling via websocket plugin and aibitat use/removeFunction * gate mid-session agent tool toggle to admins in multi-user mode * feat: increases the username character limit to 64 * add create-scheduled-job-tool * navigate to edit job modal from scheduled job card * switch to query params to follow pattern in codebase * cleanup * 1.15.0 tags (#5909) * create normalizeWeekdays helper * remove unneeded exports * feat: add PostgreSQL SSL toggle and URL-encode SQL credentials * fix: skip empty action in SQL connection update merge * move create-schedule-job agent tool to an opt-in default Agent Skill * cleanup skill filtering based on mode * revert to original filtering * Fixes typos and mistakes in Catalan translation * Additional Catalan fixes * Additional Catalan fixes * Additional fixes * Standarize on tasca * linting * fix: render kokoro-tts voice list for pre-0.3.x kokoro-fastapi servers kokoro-fastapi changed its /v1/audio/voices response shape in 0.3.x: older servers return voices as plain id strings ("af_bella") while newer ones return { id, name } objects. customModels only read voice.id and voice.name, so against the (still very common) string shape every voice became { id: undefined, name: undefined } and the UI rendered an empty, unselectable voice list. Normalize both shapes to { id, name } so the voice list loads regardless of the kokoro-fastapi version, falling back to the voice id when an object omits its name. * add translations * convert getChatCompletion to stream the response and accumulate before returning | throw error back to the caller * add try/catch around mcp.ping() ad mcp.listTools() * Update Sponsors README * fix: disable temperature for claude-sonnet-5 model * feat: adds support for openai compatible whisper api * update default fallback models for openai/anthropic * Bump bree to enable execPath as an option connect #5936 connect #5957 * rm test * ignores * open-computer * update readme * update readme * tighten copy and image * update README * bump * subagent patch * examples * copy * wrong model caption * readme bump * break out downloaded models into its own optgroup * lowercase "models" to match rest * pin demos for open-computer * Fix videos in readme. * remove videos - got embed to work * fix server type parsing and validation to match documented behavior * add coverage for MCP server list surviving post-connection failures * fix: only apply defaulty system prompt to new workspace creation when openAiPrompt is falsy * init * refactor to remove passing timezone refactor tool to be more simple for local models since they can write cron add card to go to job runs instead of edit undo edit hook * user meta cache for global use * relocate scope for some utils * fix tool for hallunicated sub-tools * disable tool in MUM if previously enabled, ask before creation of job for security/peace of mind * change maxTokens to contextWindowLimit * add omlx to getModelTag() * add fallback context window value for models that dont return max_model_len * eagerly load omlx model context windows * replace handrolled /v1/models fetch for OpenAI sdk * move donwload models accumulator into useGetProvidersHook * apply downloaded models option subgroup across other model pickers * Update model version in use case demos Updated the model version in use case demos for consistency. ;) I'm actually watching your video right now, by the way. Nice! :) By the way, my plan is to build a virtualized environment for running LLM-generated code - something like llm-sandbox - once I release a couple of other tools (should be in the next few days). The idea is to use lightweight virtual machines rather than QEMU. Although it looks like on macOS I'll probably have to borrow some of your experience with QEMU after all. If that's the case, I'll definitely reach out if I find or fix any bugs. Also, feel free to message me if you ever need to test something. I have a Windows on ARM laptop, so I can run things whenever I have a few spare minutes. Cheers! * Fix scrollbar color on light mode * open-computer: fix Windows x64 (WHPX) base image build and agent runtime Several fixes so open-computer can build a base image and run agents on Windows x64 with WHPX acceleration. Tested end to end on Windows 11 with an AMD Ryzen 5 7600: base install, provision, prod build, and a running agent serving the UI on localhost:9800. - EFI vars: use the OVMF VARS template for the writable pflash instead of a copy of the CODE firmware. Copying CODE into the vars slot left OVMF with no variable store, so the guest never POSTed and the display stayed blank. Adds resolveEfiVars() and uses it in vm.ts and base install. - WHPX CPU model: use -cpu Haswell for the x86_64 guest on Windows. -cpu host exposes APX/MPX on recent AMD CPUs, which WHPX rejects with "Unexpected VP exit code 4". The arm64 guest keeps host passthrough. - Display adapter: use a standard VGA device on Windows. OVMF does not render to virtio-gpu over VNC on the bundled Windows QEMU build, so the installer and desktop were invisible. - Installer ISO: attach it as a bootable CD-ROM during base install. It was checked for existence but never actually attached to the VM, so the installer could not boot. - VNC display on Windows: the bundled QEMU build has no gtk display backend, so gui mode now uses -display none with -vnc for the install and console. - Monitor socket cleanup: fs.rmSync on the AF_UNIX monitor socket throws EACCES on Windows. Added a removeMonitorSock() helper (cmd del fallback) used by base, control, and agents commands. - qemu-img: base install now uses the bundled qemu-img via resolveQemuImgBinary() instead of a bare PATH lookup. - Provisioning: allocate a PTY for the interactive ssh step so su can prompt for the root password during base provision. - Prod build: run services/build.sh with Git Bash on Windows. A bare "bash" resolves to the WSL launcher, which does not have the Windows Node toolchain on its PATH. Refs #5981 * open-computer: scope the EFI vars and ISO CD-ROM changes to Windows Keep macOS and Linux behavior byte for byte identical to upstream. The EFI vars template copy and the q35 ide-cd ISO attach now only apply when process.platform is win32, since the ide.0 AHCI bus does not exist on the aarch64 virt machine used elsewhere. * test: cover the Windows, macOS, and Linux QEMU arg builders Extract the platform-branching logic (machine/accel/cpu, GPU device, ISO CD-ROM, EFI vars filename) into pure functions and add node:test unit tests via tsx. The tests pin the Windows x64 behavior (WHPX with Haswell, VGA, ide-cd install media, i386 vars template) and assert that macOS and Linux keep virtio-gpu and never get the q35-only ide-cd bus. * fetch script and bundle script for base image * forgot file * fix MacOS device and qemu boot issues * patch windows fetch debian * remove dupe arg * more windows patches * fresh builds * test: update isoDeviceArgs assertion to match usb-storage install media The merge of PR #5982 changed base install media from an ide-cd device to usb-storage, but the unit test still asserted the old ide-cd device, so npm test failed on master. This updates the assertion to the usb-storage device id. * linux QEMU fallback * remove os prefix for images * Patch API Citations regression * patch Generic OpenAI bug for OSA with Magic Echo * ignore ts tests * add http://localhost:8000 and http://host.docker.internal:8000 to commone omlx urls * remove Untooled comment * change fallback context window value to 16000 * refactor handleDefaultStreamResponseV2 to conditionally break on finish_reason: stop | add usage collection for omlx streamChatCompletion * add border-none to button * transform icon to 300x300 with no trasnparent bg * docs(bare-metal): fix env var name to match frontend/.env — VITE_API_BASE * add getModelCapabilities for oMLX LLM provider * patch for informational GHSA-p9pj-g2fw-q567 reported by @kameyamei * Patch GHSA-vv8w-wg6r-hq56 from @GabrielGomesAL * remove patch in global handler * fix: preserve TTS audio content type * Update common.js * adjust regex to expand slash commands with surrounding whitespace + punctuation * add tests for grepCommand + grepAllSlashCommands slash command expansion * linting * i18n: add Lao (lo) language support (#6039) * Add Lao language support * Add Lao language support to resources * linting --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * feat(i18n): add Indonesian (id) language support - closes #4198 (#6037) * feat(i18n): add Indonesian (id) language support - closes #4198 * feat(i18n): complete 100% deep Indonesian translations * linting --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Inline MCP tool $ref/$defs schemas for Anthropic agent tool calls (#5786) Anthropic's `input_schema` does not resolve local JSON-Schema references, so MCP tools that describe nested parameters with `$ref`/`$defs` (e.g. Pydantic v2 nested models) were forwarded with dangling pointers, crashing the agent. Inline local references and strip the definition blocks before building `input_schema` so the schema is self-contained. Flat schemas are unchanged. Recursive models collapse to a generic object and unresolvable references are dropped rather than forwarded. Resolves #3938 Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * DiD improvement from informational GHSA-mc74-6fj4-gwxx by @joaovicdev * 5846 auto scroll (#6046) * patch scroll lock * debounce scroll on message reset * add toggle control for autoscroll * translations * i18n: add Croatian (hr) language support (#6052) * feat(agents): add You.com as web search provider (#6058) * feat(agents): add You.com as web search provider Add You.com to the agent web-browsing skill with a keyless free-tier default (api.you.com/v1/agents/search) and optional AGENT_YOU_API_KEY for the keyed ydc-index.io Search API. Follows the existing Brave/Exa/fastCRW provider wiring pattern. * remove test * update icon and copy --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * refactor: remove workspace profile picture feature (#6010) * remove workspace pfp workspace table column, routes + handlers, and api services * revert workspaces pfpFilename schema change and drop-column migration * delete unused UserIcon svgs, UserIcon component and ChatBubble component --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Add datetime to default system prompts (#6016) * feat: inject datetime into default system prompts * refactor to normalize all prompt callsites and var expansions --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Fix: Restore Stop Generation Button During Agent Session Execution Loop (#5970) * restore stop generation button through agent chat * remove unneeded event --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Update Sponsors README * feat: folder upload with relative paths preserved in document manager (#6027) * add folder uploading to document to document manager with relative paths preserved * simplify relative path stamp logic * lint * entire refactor * fix counter in search, refactor hook to work for files and hydration of add/remove files * make every folder a dropzone * improve file picker UX quirks for folder-in-folder uploads and checkbox state mgmt * 6027 translations (#6064) * translations for PR #6027 * fix weird translation artifacts --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * fix: keep watched document re-syncs from breaking pinned document de-duplication (#6029) A pinned document is filtered out of similarity search results by comparing the sourceIdentifier of the document on disk (title + published) against the identifier of every returned chunk. The re-sync job embedded the new content with the old published timestamp but then wrote a new one to disk, so after the first sync the identifiers no longer matched and a document that was both pinned and watched was injected into the context twice - once as full text and again as RAG chunks. Stamp the vectors, the source document and every other workspace referencing it with the same timestamp. resolves #5334 Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Add input_audio support for audio attachments on generic OpenAI provider (#6055) * add input_audio support for audio attachments on generic openai provider * handle audio attachments as input_audio on generic openai agent path * handle audio on agent native tool path + extract shared attachment util * add tests for shared attachment util + generic openai audio paths Covers attachmentToContentBlock directly (audio format normalization, data URI fallback, image_url with/without detail) and tightens the generic openai provider tests with a beforeEach-constructed provider and restored process.env between cases. --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Start model router cooldown after inference completes (#6047) * start model router cooldown after inference completes instead of at rule detection * remove comment * fire model router cooldown re-stamp when agent loop completes * re-stamp model router cooldown on every agent turn via onInterrupt/onTerminate * add tests for model router cooldown re-stamp on every agent turn * refactor to bypass prop-passing through agent flows --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * fix: validate workspace update payloads to prevent misleading 200 responses (#6070) * fix: validate workspace update payloads to prevent misleading 200 responses The /v1/workspace/{slug}/update endpoint returned HTTP 200 with a Prisma error string when the request body contained an invalid value for a writable field. lastUpdatedAt was the only writable field without a validator, so non-date values were passed straight to Prisma, which rejected them and returned the error inside a 200 response. Add a lastUpdatedAt validator that coerces the value into a valid Date (falling back to the current time), completing validation coverage for every writable field. Also return a non-2xx status from the update endpoint when the update fails so consumers can reliably detect errors instead of parsing a success response for a failure message. * cleanup comments * expand test to all validators * add validator meta tests --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * chore: route agent chats with no tools through native tooled completions (#6067) * route requests with no tools into native tool calling completion handlers * fix docblock --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * fix Bedrock model workspace selection (#6079) * fix empty agent skill section in MuM (#6080) * Reset agent clarifying-questions counter per turn (#6083) * reset agent clarifying-questions counter per turn * update comment --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * AWS Bedrock overhaul (#6081) * AWS Bedrock overhaul * Az model listing * patch lemonade URL input bug * feat: abort agent sessions end-to-end when the user stops generation (#6063) * restore stop generation button through agent chat * remove unneeded event * init * add _aborted checks in various sites * optional chain aibitat.abort() * wire in abort controllers for omlx and lemonade * wire in abort signals to remning local AI agent providers * refactor + coverage gaps --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Update Sponsors README * docs: fix broken service links in open-computer README (#6088) Two architecture links in open-computer/README.md pointed to files that do not exist: - The interface service link used ./services/server/index.js, but the service lives at ./services/interface-service/index.js. - The memory manager entry point is server.js, not index.js. Co-authored-by: richboyneedcash <273099414+richboyneedcash@users.noreply.github.com> Co-authored-by: TRAE CLI <noreply@bytedance.com> Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * update policy for UUID guessing * clarify on user defined service URLs as well * update security for repeated close issue archetypes * fix dataconnector modal height and form height * update security version support * feat: add image generation via /img command (#5904) * feat: add image generation via /img command * clean up generated images when their thread is deleted * pass generated images as context in follow-up chats * improve image generation ux when no provider is configured * fix img generation during active agent sessions * fix ollama image generation returning no image data * give image generation its own provider credentials separate from llm keys * serve generated images asynchronously to avoid blocking the event loop * render img command failures as chat errors instead of plain text * default openai image generation to gpt-image models * simplify image size handling with a configurable default * regenerate openapi spec for image size example * fix stale 512x512 image size references in env example + ui text * normalize picker for Image Gen options * fix light mode image card buttons move cleanBaseURL of lemonade to common * refactor image generation event/SSE * add dimension picker + provider specific options, update card to retain output aspect ratio * update slash command * change file scope + cleanup and stagger orphan jobs * Lemonade img dimensions * add image editing and reference passing * fix swagger issue * update endpoint for API to edit images * security patches and final pass * lint and refactor i18n usage points * translations (#6093) * abort signal handling * translations * stagger startup jobs * allow multiple image references for openai image gen --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * 6089 milvus count (#6095) * fix system vector count for milvus * fix count for Milvus/Ziillz * feat: add Gitea data connector (#6087) * feat: add Gitea data connector Adds Gitea as a repository data connector alongside the existing GitHub and GitLab connectors, closing #3744. Gitea is always self-hosted, so the API base is derived from the origin of the repository URL itself rather than being pinned to a known host. This means no extra "base URL" field is needed - the repo URL a user already has is enough. Collector: - GiteaRepoLoader talks to the Gitea v1 REST API: repository metadata for default branch resolution, paginated branch listing, recursive git tree traversal, and raw file content. Supports optional personal access tokens, ignore paths, rate-limit backoff, and degrades to public access when no token is supplied. - Registered "gitea" in both repo loader resolvers. The collector and server repo routes are already generic over :repo_platform, so no new routes are required. - Added a resync handler so watched Gitea documents can be refreshed. The chunk source stores the URL scheme explicitly, so http/https and non-standard ports survive the resync round trip. Server: - Allow "gitea" as a repo platform and as a watchable document type. Frontend: - Gitea connector UI with repo URL, optional access token, branch selector, and file ignore fields, plus citation support for gitea:// sources. * add gitlab tracking as ad-hoc fix * translations --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * border on bell for jobs * bump gemini fallback list #6109 * Fix generic openai thinking parsers (#6105) * Fix generic openai thinking parsers * Fix reasoning/thinking display for generic OpenAI provider and agent mode - Add shared `extractReasoningContent()` utility in responses.js that checks `reasoning_content`, `reasoning`, and `thinking` fields to support vLLM, DeepSeek, Ollama, and other providers - Update generic OpenAI provider to use shared utility for both streaming and non-streaming reasoning extraction - Add reasoning token capture to tooled and untooled agent paths, streaming thinking tokens live to the frontend - Emit `</think>` closing tag after stream loop for tool-call-only iterations in tooled agent path - Add `allowAnimation` prop to ThoughtChainComponent so only the actively streaming message shows the animated brain icon — older completed thought blocks show static icon - Hide copy/TTS/action buttons on thinking-only messages with no visible content via `hasVisibleContent()` guard - Skip rendering empty `<span>` when message content is only thinking tags * parallelize linter job * fix(i18n): correct zh-TW scheduled job labels (#6112) Several scheduled-job labels used unrelated literal translations, such as rendering Run as jogging and Never run as an instruction. Correct the section with terminology that matches the actual job actions and execution history. Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * feat: stream PiperTTS playback + harden long-message TTS (#6114) Bumps @mintplex-labs/piper-tts-web to ^1.0.5, which fixes the onnxruntime-web init crash (allowLocalModels), works across ort 1.18-1.24 via the wasm-only build, and chunks long inference to avoid std::bad_alloc. Frontend changes on top of that: - Stream TTS audio per sentence chunk (worker mode) so playback starts after the first chunk instead of waiting for the whole message to render - Queue-based playback in the TTS button: auto-resumes if playback catches up to generation, distinguishes user pause from chunk-end, replays long messages instantly from cached chunks, and cannot hang on mid-stream errors - Remove the 30s prediction timeout that killed legitimate long inferences (voices/flush keep theirs) - Strip <think> reasoning blocks from all spoken text (PiperTTSClient and messageToSpeech), including unterminated trailing blocks - Log render + playback progress to console (chunk N/M, % complete, waiting-on-chunk) for transparency during long generations * fix: abort PiperTTS stream + playback when switching threads using supersession UUIDs that prevent this * update security.md * FoundryLocal overhaul (#6119) * FoundryLocal overhaul * remove noop endpoints not available via REST * lint * update FL error handling for issues it has since it is unstable * no opencomputer cves * feat: support GitHub Enterprise URLs in the GitHub data connector (#6117) * feat: support GitHub Enterprise URLs in the GitHub data connector The loader rejected any host other than github.com and hard-coded https://api.github.com, so GitHub Enterprise Server instances could not be used at all. Every flavor of GitHub serves the same REST API v3 endpoints and only the root differs, so the loader now resolves an API base from the host of the repository url: github.com -> https://api.github.com GHE.com data residency -> https://api.{subdomain}.ghe.com Enterprise Server -> {origin}/api/v3 The recursive load path hands off to LangChain's GithubRepoLoader, which parses the repo url against `baseUrl` and sends requests to `apiUrl`. Both are now passed explicitly since they are not the same host on GHE.com. Enterprise instances can be served over http, which the `github://` chunkSource scheme hides, so the repo protocol is stored with the payload and replayed on resync the same way the Gitea connector already does. Existing chunkSources have no scheme stored and keep defaulting to https. resolves #3790 * unset translations since not all supported --------- Co-authored-by: Timothy Carambat <rambat1010@gmail.com> * Image usage metrics - Help us determine if we need to build out more image tools, like masking, flows, etc * pin docker scout CLI version due to VEX push bug * attempt flag * patch * v1.16.0 tags * bump tags * remove OC * v1.16.0 tags (#6122) --------- Signed-off-by: FailSafe Researcher <joshua@getfailsafe.com> Co-authored-by: FailSafe Researcher <joshua@getfailsafe.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: shatfield4 <seanhatfield5@gmail.com> Co-authored-by: Guilherme Nogueira <guilherme.lopesn@gmail.com> Co-authored-by: Marcello Fitton <macfittondev@gmail.com> Co-authored-by: rstocchi <rstocchi@buckeyebroadband.com> Co-authored-by: Jordi Mas <jmas@softcatala.org> Co-authored-by: Sanidhya Singh <singhsanidhya741@gmail.com> Co-authored-by: timothycarambat <16845892+timothycarambat@users.noreply.github.com> Co-authored-by: Petre Ghita <petre.ghita@asset-metrix.com> Co-authored-by: ButenkoMS <fi.mihej@gmail.com> Co-authored-by: Varun Anand Patkar <varunpatkar501@gmail.com> Co-authored-by: unusdon <258786172+unusdon@users.noreply.github.com> Co-authored-by: ivan-digital <root@ivan.digital> Co-authored-by: albanobattistella <34811668+albanobattistella@users.noreply.github.com> Co-authored-by: BoneNI <bounkirdni@gmail.com> Co-authored-by: Native Muttaqien <83034829+samlehoy@users.noreply.github.com> Co-authored-by: Sanidhya Singh <91531068+sanidhyasin@users.noreply.github.com> Co-authored-by: devanonyme42 <devanonyme42izahbabm@gmail.com> Co-authored-by: Souravrajvi0 <144546710+Souravrajvi0@users.noreply.github.com> Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com> Co-authored-by: Aditya Ingale <124868288+Adityai1411@users.noreply.github.com> Co-authored-by: Arslan Rasheed <115124559+ArslanRasheed60@users.noreply.github.com> Co-authored-by: richboyneedcash <preminem520@gmail.com> Co-authored-by: richboyneedcash <273099414+richboyneedcash@users.noreply.github.com> Co-authored-by: TRAE CLI <noreply@bytedance.com> Co-authored-by: Chen, Ting-An <73953029+nrps9909@users.noreply.github.com>
Note
We are also working on Open Computer which gives an entire computer environment for AI Agents to use.
This will bring AnythingLLM's agent capabilities to a new level and a novel UX paradigm for AI Agent use.
⭐ Star the repo to stay updated!
AnythingLLM: The all-in-one AI app you were looking for.
Chat with your docs, use AI Agents, hyper-configurable, multi-user, & no frustrating setup required.
|
|
Docs
|
Hosted Instance
👉 AnythingLLM for desktop (Mac, Windows, & Linux)! Download Now
Chat with your docs. Automate complex workflows with AI Agents. Hyper-configurable, multi-user ready, battle-tested—and runs locally by default with zero setup friction.
Product Overview
AnythingLLM is the all-in-one AI application that lets you build a private, fully-featured ChatGPT—without compromises. Connect your favorite local or cloud LLM, ingest your documents, and start chatting in minutes. Out of the box you get built-in agents, multi-user support, vector databases, and document pipelines — no extra configuration required.
AnythingLLM supports multiple users as well where you can control the access and experience per user without compromising the security or privacy of the instance or your intellectual property.
Cool Features of AnythingLLM
- Dynamic Model Routing - Automatically route chats to the best provider & model for the conversation based on rules you define.
- Automatic & User Managed Memories - Have your LLM remember important information about you or your workspace.
- Scheduled Tasks - Run recurring tasks or prompts on a cron schedule with full agent capabilities.
- Intelligent Skill Selection Enable unlimited tools for your models while reducing token usage by up to 80% per query
- No-code AI Agent builder
- MCP-compatibility
- Multi-modal support (both closed and open-source LLMs!)
- Custom AI Agents
- 👤 Multi-user instance support and permissioning Docker version only
- 🦾 Agents inside your workspace (browse the web, etc)
- 💬 Custom Embeddable Chat widget for your website Docker version only
- 📖 Multiple document type support (PDF, TXT, DOCX, etc)
- Intuitive chat UI with drag-and-drop uploads and source citations.
- Production-ready for any cloud deployment.
- Works with all popular closed and open-source LLM providers.
- Built-in optimizations for large document sets—lower costs and faster responses than other chat UIs.
- Full Developer API for custom integrations!
- ...and much more—install in minutes and see for yourself.
Supported LLMs, Embedder Models, Speech models, and Vector Databases
Large Language Models (LLMs):
- Any open-source llama.cpp compatible model
- OpenAI
- OpenAI (Generic)
- Azure OpenAI
- AWS Bedrock
- Anthropic
- NVIDIA NIM (chat models)
- Google Gemini Pro
- Ollama (chat models)
- LM Studio (all models)
- LocalAI (all models)
- Together AI (chat models)
- Fireworks AI (chat models)
- Perplexity (chat models)
- OpenRouter (chat models)
- DeepSeek (chat models)
- Mistral
- Groq
- Cohere
- KoboldCPP
- LiteLLM
- Text Generation Web UI
- Apipie
- xAI
- Z.AI (chat models)
- Novita AI (chat models)
- PPIO
- Gitee AI
- Moonshot AI
- Microsoft Foundry Local
- CometAPI (chat models)
- Docker Model Runner
- PrivateModeAI (chat models)
- SambaNova Cloud (chat models)
- Lemonade by AMD
- Minimax
- Cerebras (chat models)
- oMLX
Embedder models:
- AnythingLLM Native Embedder (default)
- OpenAI
- Azure OpenAI
- Gemini
- LocalAI (all)
- Ollama (all)
- LM Studio (all)
- Lemonade
- OpenRouter
- LiteLLM
- Cohere
- Voyage AI
- Mistral
- Generic OpenAI-compatible embedding APIs
Audio Transcription models:
- AnythingLLM Built-in (default)
- OpenAI
TTS (text-to-speech) support:
- Native Browser Built-in (default)
- PiperTTSLocal - runs in browser
- OpenAI TTS
- ElevenLabs
- Any OpenAI Compatible TTS service.
STT (speech-to-text) support:
- Native Browser Built-in (default)
Vector Databases:
Technical Overview
This monorepo consists of six main sections:
frontend: A viteJS + React frontend that you can run to easily create and manage all your content the LLM can use.server: A NodeJS express server to handle all the interactions and do all the vectorDB management and LLM interactions.collector: NodeJS express server that processes and parses documents from the UI.docker: Docker instructions and build process + information for building from source.embed: Submodule for generation & creation of the web embed widget.browser-extension: Submodule for the chrome browser extension.
🛳 Self-Hosting
Mintplex Labs & the community maintain a number of deployment methods, scripts, and templates that you can use to run AnythingLLM locally. Refer to the table below to read how to deploy on your preferred environment or to automatically deploy.
| Docker | AWS | GCP | Digital Ocean | Render.com |
|---|---|---|---|---|
![]() |
![]() |
| Railway | RepoCloud | Elestio | Northflank |
|---|---|---|---|
![]() |
or set up a production AnythingLLM instance without Docker →
How to setup for development
yarn setupTo fill in the required.envfiles you'll need in each of the application sections (from root of repo).- Go fill those out before proceeding. Ensure
server/.env.developmentis filled or else things won't work right.
- Go fill those out before proceeding. Ensure
yarn dev:serverTo boot the server locally (from root of repo).yarn dev:frontendTo boot the frontend locally (from root of repo).yarn dev:collectorTo then run the document collector (from root of repo).
Telemetry & Privacy
AnythingLLM by Mintplex Labs Inc contains a telemetry feature that collects anonymous usage information.
More about Telemetry & Privacy for AnythingLLM
Why?
We use this information to help us understand how AnythingLLM is used, to help us prioritize work on new features and bug fixes, and to help us improve AnythingLLM's performance and stability.
Opting out
Set DISABLE_TELEMETRY in your server or docker .env settings to "true" to opt out of telemetry. You can also do this in-app by going to the sidebar > Privacy and disabling telemetry.
What do you explicitly track?
We will only track usage details that help us make product and roadmap decisions, specifically:
-
Type of your installation (Docker or Desktop)
-
When a document is added or removed. No information about the document. Just that the event occurred. This gives us an idea of use.
-
Type of vector database in use. This helps us prioritize changes when updates arrive for that provider.
-
Type of LLM provider & model tag in use. This helps us prioritize changes when updates arrive for that provider or model, or combination thereof. eg: reasoning vs regular, multi-modal models, etc.
-
When a chat is sent. This is the most regular "event" and gives us an idea of the daily-activity of this project across all installations. Again, only the event is sent - we have no information on the nature or content of the chat itself.
You can verify these claims by finding all locations Telemetry.sendTelemetry is called. Additionally these events are written to the output log so you can also see the specific data which was sent - if enabled. No IP or other identifying information is collected. The Telemetry provider is PostHog - an open-source telemetry collection service.
We take privacy very seriously, and we hope you understand that we want to learn how our tool is used, without using annoying popup surveys, so we can build something worth using. The anonymous data is never shared with third parties, ever.
[View all telemetry events in source code](https://github.com/search?q=repo%3AMintplex-Labs%2Fanything-llm%20.sendTelemetry(&type=code)
Other outbound connections
If you disable telemetry, you would still see outbound connections to the following services:
- If using an external tool, LLM, Embedding models, or Vector databases, you will still see outbound connections to the respective service provider.
cdn.anythingllm.comfor pulling models from our mirror CDN. This is not tracked by telemetry and is actually useful for those in VPN restricted regions.github/githubusercontent.comThere are some various flat files that are downloaded from these domains for context window caching.
Basically, if telemetry is disabled we don't collect anything. However, depending on your setup you may still see outbound connections and would be subject to the terms of service of the respective service provider.
👋 Contributing
- Contributing to AnythingLLM - How to contribute to AnythingLLM.
💖 Sponsors
Premium Sponsors
All Sponsors














































🌟 Contributors
🔗 More Products
- AnythingLLM Mobile (MIT Licensed): A mobile application that allows you to use AnythingLLM on your mobile device.
- AnythingLLM Browser Extension: A browser extension that allows you to use AnythingLLM in your browser.
- AnythingLLM Embed: A widget that allows you to embed AnythingLLM in your website.
Copyright © 2026 Mintplex Labs.
This project is MIT licensed.





