Enhanced ChatGPT Clone: Features Agents, MCP, DeepSeek, Anthropic, AWS, OpenAI, Responses API, Azure, Groq, o1, GPT-5, Mistral, OpenRouter, Vertex AI, Gemini, Artifacts, AI model switching, message search, Code Interpreter, langchain, DALL-E-3, OpenAPI Actions, Functions, Secure Multi-User Auth, Presets, open-source for self-hosting. Active. https://librechat.ai/
Find a file
Danny Avila 3d808dc906
🛗 fix: Anchor Message Nav Gestures to One Measured Rib Layout (#15272)
* 🧭 fix: Anchor the Message Rail to One Measured Layout

The rail's magnifier wrote size into normal flow while its rows, flex items
in a scrolling column without `shrink-0`, compressed to their content the
moment the list overflowed. Hovering grew the column's scrollHeight 363→378
and shifted every rib below the pointer, staling the cached centres: the
centre of `m10`'s rib previewed `m12`, and a click in the gaps — half the
rail's area — followed that same wrong id.

Three more measurements came from different origins. The ribs' offsetParent
was the absolutely positioned `nav`, not the static column, so the rail's
auto-centring inherited the chevron's height (34px ≈ 3.5 ribs). `scrubTo`
mapped the pointer's viewport fraction across the whole rib list, ignoring
the column's own scroll, so no drag position landed on the rib under the
pointer. And `currentId` came from the IntersectionObserver, whose topmost
intersecting row is a rib short of the end whenever a `.steer-render`
follows its response in document order while sitting inside it — the rail
pointing above the end while the reader sits at the bottom.

Everything that answers "which rib is the pointer on" now reads one measured
layout in the column's own content space, and "you are here" is a scroll-spy
over entry spans, so at the bottom current lands on the terminus.

Also: a response's row mounts a frame before its first token, which labelled
the rib with nothing and opened an empty preview card; ribs now name the
pending state. Lighting separates the single current mark from the in-view
band instead of hover replacing both. An origin rib mirrors the terminus. And
the column takes one tab stop with arrow-key walking, rather than one per
message — 226 stops in a 200-message thread.

* 🧭 fix: Address Codex Round 1 on the Message Rail

All three findings were real.

An empty preview is not evidence of generation. `buildEntry` returns nothing
for image-, tool-call- and reasoning-only content too, so a reopened thread
labelled those settled rows "Generating" forever. Only the tail of a live
submission earns that wording now; every other text-free row first reads the
text its rendered card already puts on screen, and falls back to an explicit
"No preview" rather than a blank label and an empty preview panel.

A roving tab stop has to travel with focus. Deriving `tabIndex=0` from the
scroll-spy's current rib alone left a second stop behind the moment an arrow
key moved focus, so Tab re-entered the rail it had just left and Shift+Tab
walked backwards into it instead of out.

And a snap point only exists inside the range the container can reach. The
rows carry `scroll-margin-top: 4rem` against `pt-14` of content padding, so
the first entry's raw snap point is -8px; compared unclamped it read as
"there is still something above you" at the top of every conversation. That
kept the up chevron live with nowhere to go — a defect that predates this
branch — and the new origin rib inherited it, rendering as out of view while
the reader sat at the absolute top. `snapPointFor` now clamps, and the jump
helpers share it so they answer that question the same way the chevrons do.

Re-verified against the real layout: the harness now reproduces the 56px
padding and 64px scroll margin exactly, where the previous run had masked
the negative snap.

* 🧭 fix: Address Codex Round 2 on the Message Rail

Two new findings, both real, both introduced by this branch.

The row fallback was reading chrome. An assistant row renders a VISIBLE `h2`
naming the sender, so the fallback added for settled tool-call and image-only
rows handed back "Claude" for a response that had not produced a token yet —
inventing a preview and, worse, masking the pending state the previous commit
had just added. It now reads the row's message body, which is empty for a
freshly mounted response and carries the card text for a settled one.

And the hit test went stale whenever the rail scrolled. Making the rail
wheel-browsable meant the ribs can move without the pointer moving, but the
pointer's position was cached already converted into the column's content
space. The preview — and the id a click in the gaps follows — stayed on the
rib that used to be there. The pointer is stored as a viewport coordinate now
and converted at the moment it is used, with a scroll handler on the column to
redo the test when the ribs move underneath it.

Pending also narrowed to responses. Between sending and the reply's row
mounting, the reader's own turn is the last entry, and a submission in flight
is not evidence that the user's message is the thing being generated.

The three findings repeated from round one were already fixed in 51180fae7b;
codex re-reviews the whole diff rather than the increment. Re-verified each in
a browser against the real layout, including the row chrome this round adds to
the harness.
2026-08-27 06:45:57 -04:00
.claude/skills
.devcontainer
.github
.husky
.vscode
api 🧬 fix: Harden SAML Identity Binding (#15264) 2026-08-27 06:45:41 -04:00
client 🛗 fix: Anchor Message Nav Gestures to One Measured Rib Layout (#15272) 2026-08-27 06:45:57 -04:00
config
e2e 🧵 feat: Unify Subagent Child Threads (#15261) 2026-08-27 06:04:13 -04:00
helm
otel/langfuse-fanout 🩻 feat(langfuse): add tenant export telemetry (#15247) 2026-08-26 07:38:30 -04:00
packages 🧬 fix: Harden SAML Identity Binding (#15264) 2026-08-27 06:45:41 -04:00
redis-config
scripts
search
skill
src/tests
utils
.dockerignore
.env.example 🧬 fix: Harden SAML Identity Binding (#15264) 2026-08-27 06:45:41 -04:00
.gitattributes
.gitignore
.nvmrc
.prettierrc
AGENTS.md
bun.lock
CLAUDE.md
CONTEXT.md 🧾 feat: Store Durable Event Actor Receipts (#15265) 2026-08-27 06:00:43 -04:00
deploy-compose.langfuse-fanout.yml
deploy-compose.yml
docker-compose.langfuse-fanout.yml
docker-compose.override.yml.example
docker-compose.yml
Dockerfile
Dockerfile.multi
eslint.config.mjs
librechat.example.yaml 📬 feat: Serialize Bound Actor Event Mailboxes (#15260) 2026-08-26 10:02:47 -04:00
LICENSE
package-lock.json
package.json
rag.yml
README.md
README.zh.md
tool-intent-spec.md
turbo.json

LibreChat

English · 中文

Deploy on Railway Deploy on Zeabur Deploy on Sealos

Translation Progress

🚀 What's New in v0.8.8-rc1

  • Agent run control: Interrupt or steer an Agent mid-run, queue follow-up messages, and reclaim, edit, or escalate pending steers.
  • Human-in-the-loop Agents: Agents stream question progress, ask up to four related questions in one form, pause for input or tool approval, and resume.
  • Unified Agent Builder: A redesigned Tools marketplace brings together Skills, MCP, Code Interpreter, orchestration, Programmatic Tool Calling, model-spec controls, and per-tool background and intent settings.
  • Readable Agent activity: Generated activity-group headers, parent phase summaries, and live tool intent labels make long reasoning and tool runs easier to scan.
  • Code Interpreter workflows: Code and shell tools can run in the background, sandbox images return as viewable artifacts, and highly experimental stateful sessions can reuse prewarmed conversation workspaces.
  • Agent extensibility: Experimental Agent Plugins can bundle deployment Skills, MCP servers, and opt-in command hooks, while explicit subagents initialize only when selected.
  • Memory, context, and identity: Agents can manage memory with optional per-agent isolation, expose support contacts safely, and show a more faithful Context Usage gauge.
  • Sharing and files: Shared conversations show a badge and update at a stable URL, while signed-in viewers can continue them as personal copies.
  • Artifact workflows: Open previews fullscreen, work with PowerPoint .potx templates across upload, search, and code execution, upload shell scripts across common MIME variants, export Mermaid diagrams as SVG or PNG, and download original Office files from the artifact panel.
  • Models and reasoning: Added GPT-5.6 with Responses API reasoning controls, Claude Opus 5 and Sonnet 5, Gemini 3.7 and 3.6 Flash, and Gemini 3.5 Flash-Lite.
  • Langfuse observability: Configure encrypted Langfuse connections in-app, let authorized admins open sampled sessions directly, optionally fan out traces by tenant, and suppress central export per run.
  • Administration and security: Delegate config sections, encrypt registered secrets, enforce SSRF checks for speech, OCR, and web tools, and generate unique temporary credentials when secrets are blank.
  • Messages and navigation: Right-aligned user turns, unified multi-part editing, full-message copy, a dock-style message rail, virtualized search, smooth streaming, and faster Agent startup.
  • Streaming and tool reliability: Adaptive provider smoothing, Redis delta batching, dynamic MCP tool refresh, parsed MCP response media types, runtime OAuth recovery, and Agent stream circuit breakers improve long-running workflows.
  • Deployment and reliability: Added configurable HTTP timeouts, Amazon DocumentDB 5.0+ support, low-noise Redis and browser observability, and a rolling-upgrade-safe generation protocol.

Read the full v0.8.8-rc1 changelog.

Features

  • 🖥️ UI & Experience inspired by ChatGPT with enhanced design and features

  • 🤖 AI Model Selection:

    • Anthropic (Claude), AWS Bedrock, OpenAI, Azure OpenAI, Google, Vertex AI, OpenAI Responses API (incl. Azure)
    • Custom Endpoints: Use any OpenAI-compatible API with LibreChat, no proxy required
    • Compatible with Local & Remote AI Providers:
      • Ollama, groq, Cohere, Mistral AI, Apple MLX, koboldcpp, together.ai,
      • OpenRouter, Helicone, Perplexity, ShuttleAI, Deepseek, Qwen, and more
  • 🔧 Code Interpreter API:

    • Secure, Sandboxed Execution in Python, Node.js (JS/TS), Go, C/C++, Java, PHP, Rust, and Fortran
    • Seamless File Handling: Upload, process, and download files directly
    • No Privacy Concerns: Fully isolated and secure execution
    • Open-Source & Self-Hostable: powered by ClickHouse/code-interpreter
  • 🔦 Agents & Tools Integration:

    • LibreChat Agents:
      • No-Code Custom Assistants: Build specialized, AI-driven helpers
      • Agent Marketplace: Discover and deploy community-built agents
      • Collaborative Sharing: Share agents with specific users and groups
      • Flexible & Extensible: Use MCP Servers, tools, file search, code execution, and more
      • Skills: Create reusable SKILL.md instruction bundles for manual, automatic, or always-on agent workflows
      • Agent Plugins: Experimentally bundle deployment Skills and MCP servers into startup-loaded packages
      • Subagents: Delegate focused work to isolated child agent runs with their own context windows
      • Compatible with Custom Endpoints, OpenAI, Azure, Anthropic, AWS Bedrock, Google, Vertex AI, Responses API, and more
      • Model Context Protocol (MCP) Support for Tools
  • 🔍 Web Search:

    • Search the internet and retrieve relevant information to enhance your AI context
    • Combines search providers, content scrapers, and result rerankers for optimal results
    • Customizable Jina Reranking: Configure custom Jina API URLs for reranking services
    • Learn More →
  • 🪄 Generative UI with Code Artifacts:

    • Code Artifacts create React, HTML, and Mermaid content directly in chat
    • Open previews fullscreen and export Mermaid diagrams as SVG or PNG
  • 🎨 Image Generation & Editing

  • 💾 Presets & Context Management:

    • Create, Save, & Share Custom Presets
    • Switch between AI Endpoints and Presets mid-chat
    • Edit, Resubmit, and Continue Messages with Conversation branching
    • Create and share prompts with specific users and groups
    • Fork Messages & Conversations for Advanced Context control
  • 💬 Multimodal & File Interactions:

    • Upload and analyze images with Claude 3, GPT-4.5, GPT-4o, o1, Llama-Vision, and Gemini 📸
    • Chat with Files using Custom Endpoints, OpenAI, Azure, Anthropic, AWS Bedrock, & Google 🗃️
  • 🌎 Multilingual UI:

    • English, 中文 (简体), 中文 (繁體), العربية, Deutsch, Español, Français, Italiano
    • Polski, Português (PT), Português (BR), Русский, 日本語, Svenska, 한국어, Tiếng Việt
    • Türkçe, Nederlands, עברית, Català, Čeština, Dansk, Eesti, فارسی
    • Suomi, Magyar, Հայերեն, Bahasa Indonesia, ქართული, Latviešu, ไทย, ئۇيغۇرچە
  • 🧠 Reasoning UI:

    • Dynamic Reasoning UI for Chain-of-Thought/Reasoning AI models like DeepSeek-R1
  • 🎨 Customizable Interface:

    • Customizable Dropdown & Interface that adapts to both power users and newcomers
  • 🌊 Resumable Streams:

    • Never lose a response: AI responses automatically reconnect and resume if your connection drops
    • Multi-Tab & Multi-Device Sync: Open the same chat in multiple tabs or pick up on another device
    • Production-Ready: Works from single-server setups to horizontally scaled deployments with Redis
  • 🗣️ Speech & Audio:

    • Chat hands-free with Speech-to-Text and Text-to-Speech
    • Automatically send and play Audio
    • Supports OpenAI, Azure OpenAI, and Elevenlabs
  • 📥 Import & Export Conversations:

    • Import Conversations from LibreChat, ChatGPT, Chatbot UI
    • Export conversations as screenshots, markdown, text, json
  • 🔍 Search & Discovery:

    • Search all messages/conversations
  • 👥 Multi-User & Secure Access:

    • Multi-User, Secure Authentication with OAuth2, LDAP, & Email Login Support
    • Built-in Moderation, and Token spend tools
  • 🎛️ Admin Panel:

    • Browser-based UI to manage users, groups, roles, and configuration overrides
    • Edit settings and per-role/group permissions live, without redeploying
    • Bundled with the Docker Compose stacks for one-command setup
  • ⚙️ Configuration & Deployment:

    • Configure Proxy, Reverse Proxy, Docker, & many Deployment options
    • Use S3 with CloudFront for stable media links, edge delivery, signed cookies, and secured downloads
    • Use completely local or deploy on the cloud
  • 📖 Open-Source & Community:

    • Completely Open-Source & Built in Public
    • Community-driven development, support, and feedback

For a thorough review of our features, see our docs here 📚

🪶 All-In-One AI Conversations with LibreChat

LibreChat is a self-hosted AI chat platform that unifies all major AI providers in a single, privacy-focused interface.

Beyond chat, LibreChat provides AI Agents, Model Context Protocol (MCP) support, Artifacts, Code Interpreter, custom actions, conversation search, and enterprise-ready multi-user authentication.

Open source, actively developed, and built for anyone who values control over their AI infrastructure.


🌐 Resources

GitHub Repo:

Other:


📝 Changelog

Keep up with the latest updates by visiting the releases page and notes:

⚠️ Please consult the changelog for breaking changes before updating.


Star History

Star History Chart

danny-avila%2FLibreChat | Trendshift ROSS Index - Fastest Growing Open-Source Startups in Q1 2024 | Runa Capital


Contributions

Contributions, suggestions, bug reports and fixes are welcome!

For new features, components, or extensions, please open an issue and discuss before sending a PR.

If you'd like to help translate LibreChat into your language, we'd love your contribution! Improving our translations not only makes LibreChat more accessible to users around the world but also enhances the overall user experience. Please check out our Translation Guide.


💖 This project exists in its current state thanks to all the people who contribute


🎉 Special Thanks

We thank Locize for their translation management tools that support multiple languages in LibreChat.

Locize Logo