docs: Apply user feedback, Refresh Tools And Image Generation Guides - #600
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📦 Next.js Bundle Analysis for librechat.aiThis analysis was generated by the Next.js Bundle Analysis action. 🤖 This PR introduced no changes to the JavaScript bundle! 🙌 |
Contributor
📦 Next.js Bundle Analysis for librechat.aiThis analysis was generated by the Next.js Bundle Analysis action. 🤖 This PR introduced no changes to the JavaScript bundle! 🙌 |
danny-avila
marked this pull request as ready for review
June 8, 2026 19:08
Contributor
📦 Next.js Bundle Analysis for librechat.aiThis analysis was generated by the Next.js Bundle Analysis action. 🤖 This PR introduced no changes to the JavaScript bundle! 🙌 |
berry-13
added a commit
that referenced
this pull request
Sep 2, 2026
/docs/local: the desktop-installer callout added by #600 only ever landed on /docs, and /docs/local is the page the "where's the Windows installer" report was actually filed against. It rendered as a bare install-options grid with nothing saying LibreChat is not a downloadable app. pre_configured_ai/openai: `user_provided` was mentioned with no explanation of what users then do. Documents the Set API Key gear in the endpoint menu, the expiry choices (30m/2h/12h default/1d/7d/30d/never), that the key is encrypted per user server-side, and the revoke path. features/authentication: no mention of session length, so "I keep getting logged out" had nowhere to land. Adds the SESSION_EXPIRY (15m) and REFRESH_TOKEN_EXPIRY (7d) defaults, explains that the short token renews silently, and states plainly that there is no anonymous mode. cdn/s3: S3_REFRESH_EXPIRY_MS was the one env var the storage code reads that the page never listed. Feedback: 1496108363296018513, 1488860965666816060, 1500577570784149656, 1517360828762947625, 1482888861599399978, 1512086950859767868
berry-13
added a commit
that referenced
this pull request
Sep 3, 2026
/docs/local: the desktop-installer callout added by #600 only ever landed on /docs, and /docs/local is the page the "where's the Windows installer" report was actually filed against. It rendered as a bare install-options grid with nothing saying LibreChat is not a downloadable app. pre_configured_ai/openai: `user_provided` was mentioned with no explanation of what users then do. Documents the Set API Key gear in the endpoint menu, the expiry choices (30m/2h/12h default/1d/7d/30d/never), that the key is encrypted per user server-side, and the revoke path. features/authentication: no mention of session length, so "I keep getting logged out" had nowhere to land. Adds the SESSION_EXPIRY (15m) and REFRESH_TOKEN_EXPIRY (7d) defaults, explains that the short token renews silently, and states plainly that there is no anonymous mode. cdn/s3: S3_REFRESH_EXPIRY_MS was the one env var the storage code reads that the page never listed. Feedback: 1496108363296018513, 1488860965666816060, 1500577570784149656, 1517360828762947625, 1482888861599399978, 1512086950859767868
berry-13
added a commit
that referenced
this pull request
Sep 3, 2026
/docs/local: the desktop-installer callout added by #600 only ever landed on /docs, and /docs/local is the page the "where's the Windows installer" report was actually filed against. It rendered as a bare install-options grid with nothing saying LibreChat is not a downloadable app. pre_configured_ai/openai: `user_provided` was mentioned with no explanation of what users then do. Documents the Set API Key gear in the endpoint menu, the expiry choices (30m/2h/12h default/1d/7d/30d/never), that the key is encrypted per user server-side, and the revoke path. features/authentication: no mention of session length, so "I keep getting logged out" had nowhere to land. Adds the SESSION_EXPIRY (15m) and REFRESH_TOKEN_EXPIRY (7d) defaults, explains that the short token renews silently, and states plainly that there is no anonymous mode. cdn/s3: S3_REFRESH_EXPIRY_MS was the one env var the storage code reads that the page never listed. Feedback: 1496108363296018513, 1488860965666816060, 1500577570784149656, 1517360828762947625, 1482888861599399978
berry-13
added a commit
that referenced
this pull request
Sep 4, 2026
* fix(docs): send the Object Structure card and legacy /toolkit URLs to real pages
The Object Structure card on the librechat.yaml page linked to
/docs/configuration/librechat_yaml/object_structure, a nav-only folder with
no index page, so the one card promising the "complete field reference"
404'd. Point it at the Config Structure page the section actually opens
with, and redirect the folder URL there for anyone who typed or bookmarked
it.
The legacy /toolkit redirects pointed one dead spelling at another
(/toolkit/yaml_checker -> /toolkit/yaml-checker); neither exists since the
toolkit moved under /docs/toolkit. In-page links survive because
lib/localize-href.ts canonicalizes them at render time, so this only bit
direct hits, including the one absolute toolkit URL in the Linux guide
that skipped canonicalization for being external-shaped. Redirect targets
now match the canonical map in localize-href.ts.
Feedback: 1531982915729359019, 1491241561986564299
* docs(config): document the speechTab fields and defaultParamsEndpoint values
The speechTab section showed an example with eleven keys and explained
none of them. Add the field reference from the schema: accepted engine
values for STT and TTS, and the two settings whose meaning is not
guessable: decibelValue is a silence threshold in dB (-100 to -30,
default -45) and autoSendText is a delay in seconds where -1 disables
auto-send.
Neither speech page mentioned allowedAddresses, though speech.stt and
speech.tts both take one and every self-hosted example we ship
(host.docker.internal, localhost) is inside the private address space the
connect-time guard blocks.
defaultParamsEndpoint is z.string().default('custom'), not an enum, and
the page only showed 'google' as an example. The panel resolves it via
paramSettings[key] ?? [], so an unrecognized value passes validation and
renders an empty parameter panel instead of reporting an error. List the
keys that resolve and describe that failure mode.
Feedback: 1543536529195012169, 1506499310035140753
* docs(ollama): add troubleshooting and caption the stop-sequence screenshot
The Ollama reports were about diagnosis rather than the sample config. Add
the checks that resolve most failures: container-vs-host baseURL, Ollama's
default 127.0.0.1 bind, and the name-prefix rule behind model fetching:
models.ts reaches for /api/tags first only when the endpoint name starts
with "ollama". Also
note that a remote or hosted server differs only in baseURL and apiKey.
The stop-sequence screenshot had "image" as its alt text and no caption
saying which panel it shows.
Feedback: 1539423034283393146, 1529194857564995645, 1528452749685952575
* docs(features): answer recurring questions on banners, export, and search
Banner: update-banner does findOne() then findByIdAndUpdate, so there is
only ever one banner and running it again overwrites the previous message
and schedule. Two overlapping windows are therefore not possible, and
delete-banner is the only way to take one down early.
Import Conversations: the "Export your conversations" heading covered
exporting *from* ChatGPT and Claude, so readers looking for LibreChat's own
export found the wrong thing. Rename that section and document the real
export flow, its five formats, and the branch and option rules that vary
by format.
Message Search: say plainly that conversation search is keyword-based and
that semantic retrieval applies to uploaded files through the RAG API,
rather than leaving readers to infer it from "Meilisearch".
Transactions: the setting only controls whether records are written, which
is why enabling it does not make token counts appear anywhere. Point at
interface.contextUsage and contextCost for the display.
Feedback: 1494744632884596746, 1528752311281647727, 1508348821095059487,
1508345688273191073, 1522687279234289807
* docs: drop leftover social-media hashtag blocks
#699 removed the pasted video description from artifacts.mdx but the same
boilerplate survived on two other feature pages: a trailing hashtag line on
agents.mdx (plus the horizontal rule left orphaned above it) and on
code_interpreter.mdx. Both had already been machine-translated into every
locale.
Feedback: 1532228462868168886
* fix(docs): SAML_ISSUER is LibreChat's entity ID, not Auth0's
The Auth0 SAML guide told readers to copy Auth0's Issuer into SAML_ISSUER,
and its example set it to `urn:dev-xxxxx.us.auth0.com`. That is backwards.
samlStrategy.js:315 passes SAML_ISSUER as the strategy's `issuer`, which is
the entity ID LibreChat asserts about *itself* in outbound AuthnRequests and
must match the Audience configured on the Auth0 side. The identity
provider's own issuer belongs in SAML_IDP_ISSUER, used at
samlStrategy.js:185 to verify incoming assertions.
Following the page as written produced a mismatched audience on both sides.
Also states that LibreChat publishes no SP metadata document, which is what
the reporter went looking for, and fixes three typos on the lines touched.
Feedback: 1486774904136269884
* docs(endpoints): explain why a custom endpoint vanishes with no error
Seven reports say a provider never showed up after following the guide, and
the troubleshooting advice was to check the logs. That advice is misleading:
loadCustomEndpointsConfig (packages/api/src/endpoints/custom/config.ts:21-28)
filters out any endpoint missing `name`, `baseURL`, `apiKey` or `models`, or
whose `models` has neither `fetch: true` nor a non-empty `default`, and the
filter emits nothing at all. A typo or a mis-indented block therefore removes
the endpoint while the logs stay clean.
Rewrites the "Not Seeing Your Endpoint?" callout around inspecting the block
itself, notes that a duplicate name silently replaces the earlier entry, and
that a schema error anywhere in librechat.yaml stops the server rather than
disabling one section. Gives groq.mdx the enablement steps it never had:
its example uses `fetch: false`, so its `models.default` list is load-bearing
in exactly the way the filter punishes.
Also extends defaultParamsEndpoint with the four values that resolve during
schema lookup (parsers.ts:38-50) but map to no renderable parameter set.
Feedback: 1528641958187106465, 1477743384113447032, 1526344941800919159,
1477745639617073208, 1507234635573104813, 1481873299515506808
* docs: answer the installer, API-key, session, and S3 expiry questions
/docs/local: the desktop-installer callout added by #600 only ever landed on
/docs, and /docs/local is the page the "where's the Windows installer"
report was actually filed against. It rendered as a bare install-options
grid with nothing saying LibreChat is not a downloadable app.
pre_configured_ai/openai: `user_provided` was mentioned with no explanation
of what users then do. Documents the Set API Key gear in the endpoint menu,
the expiry choices (30m/2h/12h default/1d/7d/30d/never), that the key is
encrypted per user server-side, and the revoke path.
features/authentication: no mention of session length, so "I keep getting
logged out" had nowhere to land. Adds the SESSION_EXPIRY (15m) and
REFRESH_TOKEN_EXPIRY (7d) defaults, explains that the short token renews
silently, and states plainly that there is no anonymous mode.
cdn/s3: S3_REFRESH_EXPIRY_MS was the one env var the storage code reads that
the page never listed.
Feedback: 1496108363296018513, 1488860965666816060, 1500577570784149656,
1517360828762947625, 1482888861599399978
* docs(cdn): say what a file storage provider is actually used for
The Azure page described the service but never what LibreChat stores in it,
which was the reported complaint. Storage strategy is not a feature toggle:
it decides where avatars, chat uploads, image-generation output, and Code
Interpreter files all go. Names those consumers and the reason to move off
the default local disk, which does not survive container recreation and
cannot be shared across replicas.
Feedback: 1512086950859767868
* docs(speech): correct autoSendText units and autoTranscribeAudio behavior
autoSendText is seconds, not milliseconds, and -1 is what disables
auto-send; 0 sends immediately. autoTranscribeAudio controls continuous
listening (and silence detection on external engines), not transcription
of audio messages. The reference table and the STT/TTS guide disagreed
with each other and both disagreed with the client.
Also note that privately resolved cloud endpoints are not exempt from the
SSRF guard, and that browser TTS voices come from the OS rather than a
configured voice list.
* docs: address review feedback on endpoint, banner, and auth pages
- Drop the Groq enable-the-endpoint section; the custom endpoints guide
already covers it.
- contextUsage draws the gauge and is on by default; contextCost only
adds pricing and is off by default. Don't present both as required.
- An account is required to chat, but ALLOW_SHARED_LINKS_PUBLIC lets
anonymous visitors read a shared conversation.
- defaultParamsEndpoint is filled in from provider when omitted, so
'custom' is not the effective default for a provider-backed endpoint.
- Warn that OLLAMA_HOST=0.0.0.0 exposes an unauthenticated API on every
interface, and explain that apiKey is only the Bearer fallback.
- Replace double hyphens used as pauses.
* docs: correct storage persistence, Ollama model fetch, and key entry paths
- Compose bind-mounts ./images and ./uploads to the host, so local file
storage is not lost when the API container is recreated. Scope the
warning to multi-instance and no-persistent-volume deployments.
- A renamed Ollama endpoint does not come back with an empty model list.
The native /api/tags call is tried only for names starting with ollama,
but any other name, or a failure, falls through to /v1/models, which
Ollama serves at the documented /v1/ base URL.
- Auth0's Settings JSON needs an audience matching SAML_ISSUER, otherwise
Auth0 asserts its default audience and login fails on a mismatch.
- Provider keys can also be set from Settings, Data controls, API keys,
which is the only path when a model spec hides the endpoint menu.
* fix(docs): canonicalize the object_structure folder link for every locale
The next.config redirect only covers the unprefixed URL. Translated
index pages still carry the nav-only folder as the Object Structure card
target, and TrackedLink prefixes it with the active locale, so the card
stayed a 404 for all thirteen non-English readers.
Canonicalize the path in localize-href alongside the legacy /toolkit
aliases, which happens before locale prefixing and so fixes every locale
at render time. Verified against a production server: no locale emits
the bare folder href any more.
Also note that a refresh inherits the session's original expiry rather
than restarting it, so REFRESH_TOKEN_EXPIRY is measured from login.
* docs(auth): scope session expiry to LibreChat-issued refresh tokens
With OPENID_REUSE_TOKENS=true the refresh cookie holds the provider's
token, so the IdP's lifetime, rotation, and revocation policy end the
session and raising REFRESH_TOKEN_EXPIRY cannot extend it.
* docs(ollama): correct the stale 'fetching not supported' comments
The page's primary example already uses fetch: true, and models.ts has a
dedicated Ollama fetch path, so the two examples in the stop-sequence
callout contradicted the rest of the page. Say why the list is pinned
instead, and let the hosted-proxy example fetch, which is the point of
the /v1/models fallback described above it.
1 task done
berry-13
added a commit
that referenced
this pull request
Sep 6, 2026
…all hub A reader on /de/docs/local reported that they wanted a Windows app. The Local Installation hub renders three install cards and no prose, so nothing on the page tells a reader that LibreChat is a self-hosted web application rather than something you download and run natively. /docs already carries this clarification (added in #600), but the install hub is a separate entry point that readers reach directly from search and from the sidebar, so that note never reaches them. The complaint arriving again on /docs/local is evidence that one placement is not enough. Adds a short callout that answers the question directly and points Windows readers at Docker Desktop. The localhost URL is scoped to Docker and npm, since the Helm chart deploys to a Kubernetes cluster and is reached through cluster networking rather than a local address. Also widens the page description so the expectation is set in search results. Verified against the app source at origin/dev: LibreChat has no Electron, Tauri, or other desktop packaging, and PORT defaults to 3080 in .env.example. Discord feedback ID: 1546161795104768073 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UqsVMs6sqXvDj8KvRut897
berry-13
added a commit
that referenced
this pull request
Sep 6, 2026
…all hub (#758) A reader on /de/docs/local reported that they wanted a Windows app. The Local Installation hub renders three install cards and no prose, so nothing on the page tells a reader that LibreChat is a self-hosted web application rather than something you download and run natively. /docs already carries this clarification (added in #600), but the install hub is a separate entry point that readers reach directly from search and from the sidebar, so that note never reaches them. The complaint arriving again on /docs/local is evidence that one placement is not enough. Adds a short callout that answers the question directly and points Windows readers at Docker Desktop. The localhost URL is scoped to Docker and npm, since the Helm chart deploys to a Kubernetes cluster and is reached through cluster networking rather than a local address. Also widens the page description so the expectation is set in search results. Verified against the app source at origin/dev: LibreChat has no Electron, Tauri, or other desktop packaging, and PORT defaults to 3080 in .env.example. Discord feedback ID: 1546161795104768073 Claude-Session: https://claude.ai/code/session_01UqsVMs6sqXvDj8KvRut897 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
I refreshed the LibreChat docs navigation and setup guidance based on user feedback so readers can find feature docs earlier, configure current agent tools, and understand the common .env/librechat.yaml/Docker restart workflow.
IMAGE_GEN_OAI_MODELin the Image Generation guide and clarified where users generate or edit images in LibreChat.librechat.yamlpages with concrete change workflow, mount, restart, verify, and logs guidance.402 Payment Requiredresponses.Change Type
Testing
pnpm install --frozen-lockfilebecause the worktree did not havenode_modules.pnpm buildafter the initial tools/image generation pass.http://localhost:3333: Features appears immediately after Quick Start, the Tools page includes current tools without legacy Zapier/SerpAPI/Browser entries, and the Image Generation page includesIMAGE_GEN_OAI_MODELplus Agent Builder guidance.pnpm buildagain after the broader feedback pass.Test Configuration:
pnpm starton port3333Checklist