Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
432 commits
Select commit Hold shift + click to select a range
5617bf7
🧭 fix: Correct Subpath Routing for SSE and Favorites Endpoints (#11339)
SpectralOne Jan 13, 2026
774f1f2
🗑️ chore: Remove YouTube API integration (#11331)
leondape Jan 13, 2026
10f591a
📊 refactor: Use Estimated Document Count for Meilisearch Sync (#11329)
ablizorukov Jan 13, 2026
a95fea1
🌅 fix: Agent Avatar S3 URL Refresh Pagination and Persistence (#11323)
darthhexx Jan 13, 2026
9d5e80d
🛠️ fix: UI/UX for Known Server-sent Errors (#11343)
danny-avila Jan 13, 2026
8d74fcd
📦 chore: npm audit fix (#11346)
danny-avila Jan 14, 2026
39a227a
🌍 i18n: Update translation.json with latest translations (#11342)
github-actions[bot] Jan 14, 2026
b5e4c76
🔀 refactor: Endpoint Check for File Uploads in Images Route (#11352)
danny-avila Jan 14, 2026
9562f92
🪨 fix: Bedrock Provider Support for Memory Agent (#11353)
danny-avila Jan 15, 2026
bb0fa3b
📦 chore: Cleanup Unused Packages (#11369)
danny-avila Jan 16, 2026
4768824
🌍 i18n: Update translation.json with latest translations (#11370)
github-actions[bot] Jan 16, 2026
81f4af5
🪨 feat: Anthropic Beta Support for Bedrock (#11371)
danny-avila Jan 16, 2026
c378e77
🪵 refactor: Preserve Job Error State for Late Stream Subscribers (#11…
danny-avila Jan 16, 2026
02d75b2
🛠️ fix: improved retry logic during meili sync & improved batching (#…
ablizorukov Jan 16, 2026
f7893d9
🔧 fix: Update Z-index values for Navigation and Mask layers (#11375)
danny-avila Jan 16, 2026
c11245f
🫙 fix: Cache Control Immutability for Multi-Agents (#11383)
danny-avila Jan 17, 2026
922cdaf
✨ v0.8.2-rc3 (#11384)
danny-avila Jan 17, 2026
5037617
🎨 fix: Layering for Right-hand Side Panel (#11392)
danny-avila Jan 18, 2026
66d4540
📦 fix: `@librechat/agents` v3.0.775 for Anthropic Message Coercion Fi…
danny-avila Jan 18, 2026
b70528f
📦 fix: `@librechat/agents` v3.0.776 for Anthropic Message Coercion Fi…
danny-avila Jan 18, 2026
277fbd1
🔒 fix: Session Expiry Management for OpenID/SAML (#11407)
danny-avila Jan 19, 2026
9134471
🔎 fix: Focus Credential Inputs in Agent Tools (#11394)
dustinhealy Jan 19, 2026
4a1d2b0
📊 fix: MeiliSearch Sync Threshold & Document Count Accuracy (#11406)
ablizorukov Jan 19, 2026
e509ba5
🪄 fix: Code Block handling in Artifact Updates (#11417)
danny-avila Jan 20, 2026
32e6f3b
📢 fix: Alert for Agent Builder Name Invalidation (#11430)
dustinhealy Jan 20, 2026
36c5a88
💰 fix: Multi-Agent Token Spending & Prevent Double-Spend (#11433)
danny-avila Jan 20, 2026
f09eec8
✅ feat: Zod Email Validation at Login (#11434)
dustinhealy Jan 20, 2026
c5113a7
🔧 fix: Add `hasAgentAccess` to dependencies in `useNewConvo` hook (#1…
danny-avila Jan 20, 2026
24e182d
🌍 i18n: Update translation.json with latest translations (#11439)
github-actions[bot] Jan 21, 2026
e608c65
✂️ fix: Clipped Focus Outlines in Conversation Panel (#11438)
dustinhealy Jan 21, 2026
828c2b2
📏 fix: Dropdown Menu Z-Index Adjustments (#11441)
dustinhealy Jan 21, 2026
12ec64b
🔖 fix: Announce Bookmark Selection State (#11450)
dustinhealy Jan 21, 2026
e2ec3f1
↕️ fix: Add `aria-expanded` Attribute to ConvoOptions (#11452)
dustinhealy Jan 21, 2026
9d61271
✅️ feat: Accessible Model Selection Icons and Announcements (#11454)
dustinhealy Jan 21, 2026
dea2469
😶‍🌫 feat: Better Blur on Collapsed Chat Input (#11464)
dustinhealy Jan 21, 2026
11210d8
🏁 fix: Message Race Condition if Cancelled Early (#11462)
danny-avila Jan 21, 2026
191cd39
🛂 fix: Encode Non-ASCII Characters in MCP Server Headers (#11432)
kenzaelk98 Jan 21, 2026
639a60c
📬 fix: Email Verification Handling in Create-User Command (#11408)
shtayeb Jan 21, 2026
74cc001
🌍 i18n: Update translation.json with latest translations (#11465)
github-actions[bot] Jan 21, 2026
7f59a18
🔧 fix: Agent Deletion Logic to Update User Favorites (#11466)
danny-avila Jan 21, 2026
7204e74
📦 chore: bump lodash version to ^4.17.23 (#11476)
danny-avila Jan 22, 2026
cfd5c79
🧑‍🏫 fix: Multi-Agent Instructions Handling (#11484)
danny-avila Jan 23, 2026
0cf7bb2
🔊 fix: Conversation Search Result Announcement (#11449)
dustinhealy Jan 23, 2026
18a0e8a
🎯 feat: High Contrast Focus Outlines for Account Settings Menu Items …
dustinhealy Jan 23, 2026
ee44c63
🔒 feat: Sanitize Placeholders in User-provided MCP Server Config (#11…
danny-avila Jan 23, 2026
8be0047
🔒 fix: Access Check for User-Specific Job Metadata in Streaming Endpo…
danny-avila Jan 23, 2026
6a49861
🔧 refactor: Offset when deleting documents during MeiliSearch cleanup…
ablizorukov Jan 24, 2026
0b4deac
🧩 fix: Missing Memory Agent Assignment for Matching IDs (#11514)
danny-avila Jan 25, 2026
5310529
🪤 refactor: Reset Interaction State When Mouse Leaves Conversation It…
mohamedmagdy17593 Jan 26, 2026
8c6277a
🍪 refactor: Secure Cookie Setting for Localhost OAuth Sessions (#11518)
maxesse Jan 26, 2026
25fe406
📦 chore: Bump `@modelcontextprotocol/sdk` to v1.25.3 (#11545)
danny-avila Jan 28, 2026
ddf85b3
🌍 i18n: Update translation.json with latest translations (#11546)
github-actions[bot] Jan 28, 2026
95a234f
🧹 refactor: Remove context-1m header filtering from Vertex Endpoint (…
danny-avila Jan 28, 2026
13cea97
🔗 feat: More Accessible Link Behaviors and Minor UI Improvements (#11…
dustinhealy Jan 28, 2026
e162bd1
🌍 i18n: Update translation.json with latest translations (#11552)
github-actions[bot] Jan 28, 2026
6960bd3
✨ v0.8.2 (#11547)
danny-avila Jan 28, 2026
efbc088
📦 chore: Bump chart version to 1.9.7
danny-avila Jan 28, 2026
7c9c7e5
⏲️ feat: Defer Loading MCP Tools (#11270)
danny-avila Jan 9, 2026
3d98194
🦥 feat: Add Deferred Tools as Agents Capability (#11295)
danny-avila Jan 11, 2026
b6af884
🔐 feat: Admin Auth. Routes with Secure Cross-Origin Token Exchange (#…
danny-avila Jan 11, 2026
c18dc0d
🌏 fix: Update UI text for `com_ui_analyzing`
danny-avila Jan 11, 2026
75c02a1
🗂️ feat: Better Persistence for Code Execution Files Between Sessions…
danny-avila Jan 16, 2026
bb220f1
👤 feat: AWS Bedrock Custom Inference Profiles (#11308)
dustinhealy Jan 16, 2026
ed61b7f
📦 chore: Bump `@librechat/agents` to v3.1.0
danny-avila Jan 19, 2026
dd4bbd3
🪪 feat: Microsoft Graph Access Token Placeholder for MCP Servers (#10…
maxesse Jan 19, 2026
6279ea8
🛸 feat: Remote Agent Access with External API Support (#11503)
danny-avila Jan 26, 2026
5af1342
🦥 refactor: Event-Driven Lazy Tool Loading (#11588)
danny-avila Feb 1, 2026
d130378
🔐 fix: MCP OAuth Tool Discovery and Event Emission (#11599)
danny-avila Feb 2, 2026
9a38af5
📉 feat: Add Token Usage Tracking for Agents API Routes (#11600)
danny-avila Feb 2, 2026
40c5804
🗑️ chore: Remove Dev Artifacts for Deferred Tools Capability (#11601)
danny-avila Feb 2, 2026
3ffc0c7
🎯 feat: Add Programmatic Tool Calling UI for MCP Tools (#11604)
danny-avila Feb 2, 2026
9f23dd3
📦 chore: Update package dependencies and versions (#11606)
danny-avila Feb 2, 2026
5cf50dd
🔦 fix: Tool resource files not visible in event-driven mode (#11610)
usnavy13 Feb 4, 2026
56a1b28
🔓 docs: Comment Out MCP Permissions in `librechat.example.yaml` (#11620)
dustinhealy Feb 4, 2026
f34052c
🌙 feat: Moonshot Provider Support (#11621)
danny-avila Feb 4, 2026
5eb0a3a
⚠️ chore: Remove Deprecated `forcePrompt` setting (#11622)
danny-avila Feb 4, 2026
6274268
📦 chore: Update @librechat/agents to v3.1.31 & Apply NPM Audit (#11623)
danny-avila Feb 4, 2026
2cef936
👆 fix: Web Search and Code Interpreter Toggle Cursor Hover Behavior (…
dustinhealy Feb 4, 2026
e89e514
📱 fix: Mention Touch UX and MCP Tool UI Consistency (#11627)
danny-avila Feb 4, 2026
db84ec6
🎭 chore: Padding to Maskable Icon for Android adaptive icons (#11626)
hellojaccc Feb 4, 2026
5dc5799
✈️ refactor: Single-Flight Deduplication for MCP Server Configs and O…
danny-avila Feb 4, 2026
b87b8ce
📦 chore: Update @librechat/agents to v3.1.32 (#11630)
danny-avila Feb 5, 2026
61f54e0
🪢 docs: add Langfuse to `.env.example` (#11632)
jannikmaierhoefer Feb 5, 2026
c8e4257
📦 chore: Update @modelcontextprotocol/sdk to v1.26.0 (#11636)
danny-avila Feb 5, 2026
1ba5bf8
📬 feat: Implement Delta Buffering System for Out-of-Order SSE Events …
danny-avila Feb 5, 2026
24625f5
🧩 refactor: Tool Context Builders for Web Search & Image Gen (#11644)
danny-avila Feb 5, 2026
8cf5ae7
🛡️ fix: Preserve CREATE/SHARE/SHARE_PUBLIC Permissions with Boolean C…
danny-avila Feb 5, 2026
754d921
🧽 chore: Remove deprecated Claude models from Default List (#11639)
saneroen Feb 5, 2026
fcb3634
🌍 i18n: Support for `Icelandic`, `Lithuanian`, `Nynorsk` and `Slovak`…
berry-13 Feb 5, 2026
4662479
🗣 fix: Add Various State Change Announcements (#11495)
dustinhealy Feb 5, 2026
feb72ad
🔄 refactor: Sequential Event Ordering in Redis Streaming Mode (#11650)
danny-avila Feb 5, 2026
e1f0261
📦 chore: Update `@librechat/agents` to v3.1.33 (#11665)
danny-avila Feb 6, 2026
1d5f2eb
🌍 i18n: Update translation.json with latest translations (#11655)
github-actions[bot] Feb 6, 2026
41e2348
🤖 feat: Claude Opus 4.6 - 1M Context, Premium Pricing, Adaptive Think…
danny-avila Feb 6, 2026
968e97b
🌍 i18n: Update translation.json with latest translations (#11672)
github-actions[bot] Feb 7, 2026
a771d70
🎬 fix: Code Session Context In Event Driven Mode (#11673)
danny-avila Feb 7, 2026
9054ca9
🆔 fix: Atomic File Dedupe, Bedrock Tokens Fix, and Allowed MIME Types…
danny-avila Feb 7, 2026
e646a36
🌊 fix: Prevent Truncations When Redis Resumable Streams Are Enabled (…
danny-avila Feb 10, 2026
8da3c38
🪟 fix: Update Link Target to Open in Separate Tabs (#11669)
flyinggrizzly Feb 10, 2026
4ddaab6
🔧 fix: Update z-index for ImagePreview modal components (#11714)
danny-avila Feb 10, 2026
299efc2
📦 chore: Bump `@librechat/agents` & `axios`, Bedrock Prompt Caching f…
danny-avila Feb 11, 2026
d6b6f19
♿ style(MCP): Enhance dialog accessibility and styling consistency (#…
berry-13 Feb 12, 2026
924be3b
🛡️ fix: Implement TOCTOU-Safe SSRF Protection for Actions and MCP (#1…
danny-avila Feb 12, 2026
417405a
🏢 fix: Handle Group Overage for Azure Entra Authentication (#11557)
WhammyLeaf Feb 12, 2026
c7531dd
🕵️‍♂️ fix: Handle 404 errors on agent queries for favorites (#11587)
ethanlaj Feb 12, 2026
5b67e48
🗃️ refactor: Separate Tool Cache Namespace for Blue/Green Deployments…
danny-avila Feb 12, 2026
cc7f610
💡 fix: System Theme Picker Selection (#11220)
dustinhealy Feb 12, 2026
72a30cd
🌍 i18n: Update translation.json with latest translations (#11739)
github-actions[bot] Feb 12, 2026
599f4a1
🛡️ fix: Secure MCP/Actions OAuth Flows, Resolve Race Condition & Tool…
danny-avila Feb 12, 2026
7067c35
🏁 fix: Resolve Content Aggregation Race Condition in Agent Event Hand…
danny-avila Feb 12, 2026
e3a60ba
📦 chore: @librechat/agents to v3.1.41 (#11759)
danny-avila Feb 12, 2026
793ddbc
🔎 fix: Include Legacy Documents With Undefined `_meiliIndex` in Searc…
ablizorukov Feb 12, 2026
b8c31e7
🔱 chore: Harden API Routes Against IDOR and DoS Attacks (#11760)
danny-avila Feb 12, 2026
e142ab7
🔒 fix: Prevent Race Condition in RedisJobStore (#11764)
danny-avila Feb 12, 2026
3888dfa
⛵ feat: Expose enableServiceLinks in Helm Deployment Templates (#11741)
bhat-ganesh Feb 13, 2026
2e42378
🔒 fix: Secure Cookie Localhost Bypass and OpenID Token Selection in A…
danny-avila Feb 13, 2026
8e3b717
🦙 fix: Memory Agent Fails to Initialize with Ollama Provider (#11680)
calkeo Feb 13, 2026
dc89e00
🪙 refactor: Distinguish ID Tokens from Access Tokens in OIDC Federate…
busla Feb 13, 2026
276ac8d
🛰️ feat: Add Bedrock Parameter Settings for MoonshotAI and Z.AI Model…
danny-avila Feb 13, 2026
ccbf9dc
🧰 fix: Convert `const` to `enum` in MCP Schemas for Gemini Compatibil…
danny-avila Feb 13, 2026
e50f590
🏎️ feat: Smart Reinstall with Turborepo Caching for Better DX (#11785)
danny-avila Feb 13, 2026
dc489e7
🪟 fix: Tab Isolation for Agent Favorites + MCP Selections (#11786)
danny-avila Feb 13, 2026
6cc6ee3
📳 refactor: Optimize Model Selector (#11787)
danny-avila Feb 14, 2026
467df0f
🎭 feat: Override Custom Endpoint Schema with Specified Params Endpoin…
danny-avila Feb 14, 2026
f72378d
🧩 chore: Extract Agent Client Utilities to `/packages/api` (#11789)
danny-avila Feb 14, 2026
65d1382
📦 chore: `@librechat/agents` to v3.1.42 (#11790)
danny-avila Feb 14, 2026
bf1f2f4
🗨️ refactor: Better Whitespace handling in Chat Message rendering (#1…
danny-avila Feb 14, 2026
10685fc
🗂️ refactor: Artifacts via Model Specs & Scope Badge Persistence by S…
danny-avila Feb 14, 2026
b0a32b7
👻 fix: Prevent Async Title Generation From Recreating Deleted Convers…
danny-avila Feb 14, 2026
a89945c
🌙 fix: Accessible Contrast for Theme Switcher Icons (#11795)
dustinhealy Feb 14, 2026
2513e0a
🔧 feat: `deleteRagFile` utility for Consistent RAG API document delet…
ethanlaj Feb 14, 2026
bf9aae0
💎 feat: Add Redis as Optional Sub-chart Dependency in Helm Chart (#11…
SharpLu Feb 14, 2026
12f45c7
🎮 feat: Bedrock Parameters for OpenAI GPT-OSS models (#11798)
danny-avila Feb 14, 2026
2ea72a0
🎛️ fix: Google JSON Schema Normalization/Resolution Logic (#11804)
danny-avila Feb 16, 2026
b06e741
📦 chore: `@librechat/agents` to v3.1.43 (#11805)
danny-avila Feb 16, 2026
bddbd47
🪪 fix: Pass Scope in OpenID Refresh Token Grant for Azure Custom API …
seung-myung Feb 16, 2026
3c844c9
🥠 refactor: Always set OIDC refresh token cookie to survive session e…
danny-avila Feb 16, 2026
413c2bc
🪂 fix: Handle MongoDB Connection Errors to Prevent Process Crashes (#…
SharpLu Feb 16, 2026
35672e0
📦 chore: `@librechat/agents` to v3.1.44 (#11811)
danny-avila Feb 16, 2026
b216723
📋 chore: Document Uncaught Exception Config and Fix Empty Text Export…
danny-avila Feb 16, 2026
be78f8b
📦 chore: Update `@librechat/agents` to v3.1.45 (#11815)
danny-avila Feb 17, 2026
8dd814d
🌍 i18n: Update translation.json with latest translations (#11813)
github-actions[bot] Feb 17, 2026
e710a12
🪆 refactor: Internalize Producer Event Handling into Agent Graph Cont…
danny-avila Feb 17, 2026
0697e8c
🤖 feat: Claude Sonnet 4.6 support (#11829)
danny-avila Feb 17, 2026
56624b0
🌍 i18n: Update translation.json with latest translations (#11831)
github-actions[bot] Feb 17, 2026
2ec64af
📦 chore: Bump Dependabot Packages (#11836)
danny-avila Feb 17, 2026
dbf8cd4
🪹 fix: Prevent whitespace-only Chat input Submissions (#11838)
dobernike Feb 18, 2026
3bf715e
♻️ refactor: On-demand MCP connections: remove proactive reconnect, d…
danny-avila Feb 18, 2026
5ea59ec
🐛 fix: Normalize `output_text` blocks in Responses API input conversi…
danny-avila Feb 18, 2026
3fa94e8
⚛️ refactor: Redis Scalability Improvements for High-Throughput Deplo…
danny-avila Feb 18, 2026
5824298
📦 chore: Bump `fast-xml-parser` to v5.3.6 (#11841)
danny-avila Feb 18, 2026
252a5cc
🔗 fix: Preserve Stream State Across Reconnects to Prevent Reorder Buf…
danny-avila Feb 18, 2026
42718fa
🧭 fix: Robust 404 Conversation Not Found Redirect (#11853)
danny-avila Feb 18, 2026
50a48ef
🧬 fix: Backfill Missing SHARE Permissions and Migrate Legacy SHARED_G…
danny-avila Feb 18, 2026
9eeec6b
✨ v0.8.3-rc1 (#11856)
danny-avila Feb 19, 2026
c3da148
📝 docs: Add AGENTS.md for Project Structure and Coding Standards (#11…
danny-avila Feb 19, 2026
a103ce7
🔍 chore: Update MeiliSearch version (#11873)
danny-avila Feb 20, 2026
7a1d296
🤖 feat: Gemini 3.1 Pricing and Context Window (#11884)
danny-avila Feb 20, 2026
59717f5
✳️ docs: Point CLAUDE.md to AGENTS.md (#11886)
danny-avila Feb 20, 2026
5d2b7fa
🪣 fix: Proper Key Extraction from S3 URL (#11241)
H31nz3l Feb 21, 2026
e920616
🌍 i18n: Update translation.json with latest translations (#11887)
github-actions[bot] Feb 21, 2026
4404319
📦 chore: Bump `@librechat/agents` to v3.1.51 (#11891)
danny-avila Feb 21, 2026
cca9d63
🔒 refactor: `graphTokenController` to use federated access token for …
danny-avila Feb 21, 2026
b7bfdfa
🪪 fix: Handle Delimited String Role Claims in OpenID Strategy (#11892)
danny-avila Feb 21, 2026
7692fa8
🪣 fix: S3 path-style URL support for MinIO, R2, and custom endpoints …
danny-avila Feb 21, 2026
7ce898d
📄 feat: Local Text Extraction for PDF, DOCX, and XLS/XLSX (#11900)
danny-avila Feb 22, 2026
b349f2f
🪣 fix: Serve Fresh Presigned URLs on Agent List Cache Hits (#11902)
danny-avila Feb 22, 2026
1d0a4c5
🪨 feat: AWS Bedrock Document Uploads (#11912)
dustinhealy Feb 24, 2026
f3eb197
💎 fix: Gemini Image Gen Tool Vertex AI Auth and File Storage (#11923)
danny-avila Feb 24, 2026
3d7e263
🖱️ feat: Native Browser Navigation Support for New Chat (#11904)
Fahleen1 Feb 24, 2026
8c3c326
🔌 fix: Reuse Undici Agents Per Transport and Close on Disconnect (#11…
danny-avila Feb 25, 2026
44dbbd5
♿ a11y: Hide Collapsed Thinking Content From Screen Readers (#11927)
danny-avila Feb 25, 2026
9a8a5d6
⏱️ fix: Separate MCP GET SSE Stream Timeout from POST and Suppress SD…
danny-avila Feb 25, 2026
4080e91
📦 chore: Bump `@modelcontextprotocol/sdk` from 1.26.0 to 1.27.1 (#11937)
danny-avila Feb 25, 2026
59bd27b
🛡️ chore: Bump ESLint Tooling Deps and Resolve `ajv` Security Vulnera…
danny-avila Feb 25, 2026
a0f9782
🪣 fix: Prevent Memory Retention from AsyncLocalStorage Context Propag…
danny-avila Feb 25, 2026
e978a93
📍 feat: Preserve Deep Link Destinations Through the Auth Redirect Flo…
vmskonakanchi Feb 26, 2026
13df8ed
🪪 feat: Add OPENID_EMAIL_CLAIM for Configurable OpenID User Identifie…
jkuehn Feb 26, 2026
3a079b9
📌 fix: Populate userMessage.files Before First DB Save (#11939)
marbence101 Feb 26, 2026
046e922
🧩 feat: OpenDocument Format File Upload and Native ODS Parsing (#11959)
danny-avila Feb 26, 2026
0568f1c
🪃 fix: Prevent Recursive Login Redirect Loop (#11964)
danny-avila Feb 26, 2026
09d5b1a
📦 chore: bump `minimatch` due to ReDoS vulnerability, bump `rimraf`, …
danny-avila Feb 26, 2026
b01f3cc
🧩 fix: Redirect Stability and Build Chunking (#11965)
danny-avila Feb 26, 2026
a17a38b
🚅 docs: update Railway template link (#11966)
berry-13 Feb 26, 2026
6169d4f
🚦 fix: 404 JSON Responses for Unmatched API Routes (#11976)
danny-avila Feb 28, 2026
8b15907
🪙 feat: Add `messageId` to Transactions (#11987)
danny-avila Feb 28, 2026
43ff3f8
💸 fix: Model Identifier Edge Case in Agent Transactions (#11988)
danny-avila Feb 28, 2026
cde5079
🎯 fix: Use Agents Endpoint Config for Agent Panel File Upload Validat…
danny-avila Feb 28, 2026
e6b324b
🧠 feat: Add `reasoning_effort` configuration for Bedrock models (#11991)
danny-avila Feb 28, 2026
826b494
🔀 feat: update OpenRouter with new Reasoning config (#11993)
danny-avila Feb 28, 2026
723acd8
🎚️ feat: Add Thinking Level Parameter for Gemini 3+ Models (#11994)
danny-avila Feb 28, 2026
0e5ee37
👁️‍🗨️ fix: Replace Select with Menu in AccountSettings for Screen Rea…
dlew Feb 28, 2026
e1e204d
🧮 refactor: Bulk Transactions & Balance Updates for Token Spending (#…
danny-avila Mar 1, 2026
ce13382
📦 chore: update multer dependency to v2.1.0 (#12000)
danny-avila Mar 1, 2026
5be9070
✂️ fix: Unicode-Safe Title Truncation and Shared View Layout Polish (…
danny-avila Mar 1, 2026
1f82fb8
🪵 refactor: `onmessage` Handler and Restructure MCP Debug Logging (#1…
danny-avila Mar 2, 2026
36e3700
🌍 i18n: Update translation.json with latest translations (#12005)
github-actions[bot] Mar 2, 2026
a0a1749
🔗 fix: Normalize MCP OAuth `resource` parameter to match token exchan…
danny-avila Mar 2, 2026
2a5123b
📅 refactor: Replace Numeric Weekday Index with Named Day in Date Temp…
danny-avila Mar 3, 2026
f7ac449
🔌 fix: Resolve MCP OAuth flow state race condition (#11941)
busla Mar 3, 2026
8130db5
💤 fix: Add `inert` to Hidden/Background Content (#12016)
dlew Mar 3, 2026
8f7579c
🫳 fix: Restore Background on Drag and Drop Overlay (#12017)
dlew Mar 3, 2026
c0236b4
🔍 fix: Correct Conversations ARIA Role and Increase Placeholder Contr…
dlew Mar 3, 2026
b18915a
🚪 fix: Complete OIDC RP-Initiated Logout With id_token_hint and Redir…
danny-avila Mar 3, 2026
93560f5
👥 fix: Duplicate Indicators for Model Specs (#11946)
dustinhealy Mar 3, 2026
9b31528
🐳 chore: Update image registry references in Docker/Helm configuratio…
danny-avila Mar 3, 2026
7c71875
🧭 fix: Restore Post-Auth Navigation After Silent Token Refresh (#12025)
danny-avila Mar 3, 2026
b1771e0
🌐 fix: Preserve URL Query Params Through Auth Refresh and Conversatio…
danny-avila Mar 3, 2026
2323725
⚡ chore: bump `vite` to v7 (#12031)
danny-avila Mar 3, 2026
619d353
🔒 fix: Request interceptor for Shared Link Page Scenarios (#12036)
danny-avila Mar 3, 2026
2f2a259
📦 chore: Bump `fast-xml-parser` to v5.3.8 (#12040)
danny-avila Mar 3, 2026
3e487df
📦 chore: Bump `turbo` to v2.8.12 (#12042)
danny-avila Mar 3, 2026
a2a09b5
🤖 feat: `gemini-3.1-flash-lite-preview` Window & Pricing (#12043)
danny-avila Mar 3, 2026
d3c0605
🗝️ feat: Credential Variables for DB-Sourced MCP Servers (#12044)
danny-avila Mar 3, 2026
474001c
🌍 chore: Update translation for "no auth" message in UI (#12048)
danny-avila Mar 3, 2026
d362284
💰 feat: Add gpt-5.3 context window and pricing (#12049)
danny-avila Mar 4, 2026
14bcab6
🧬 feat: Allow Agent Editors to Duplicate Agents (#12041)
pnancarrow Mar 4, 2026
6394982
📦 chore: Update `underscore` to v1.13.8 (#12050)
danny-avila Mar 4, 2026
4af2347
📦 chore: Bump `@librechat/agents` to v3.1.55 (#12051)
danny-avila Mar 4, 2026
6ebee06
🤝 fix: Respect Server Token Endpoint Auth Method Preference in MCP OA…
danny-avila Mar 4, 2026
f1eabdb
🌗 refactor: Consistent Mermaid Theming for Inline and Artifact Render…
danny-avila Mar 4, 2026
a0bcb44
🎨 chore: Update Agent Tool with new SVG assets (#12065)
danny-avila Mar 4, 2026
490ad30
🧩 fix: Expand Toolkit Definitions to Include Child Tools in Event-Dri…
danny-avila Mar 4, 2026
7e85cf7
✨ v0.8.3-rc2 (#12027)
danny-avila Mar 4, 2026
c6dba9f
🌍 i18n: Update translation.json with latest translations (#12070)
github-actions[bot] Mar 5, 2026
956f8fb
🏆 fix: Longest-or-Exact-Key Match in `findMatchingPattern`, Remove De…
danny-avila Mar 5, 2026
0ef369a
📦 chore: npm audit bump (#12074)
danny-avila Mar 5, 2026
afb3510
📦 chore: Bump `multer` to v2.1.1
danny-avila Mar 5, 2026
9956a72
🧭 fix: Subdirectory Deployment Auth Redirect Path Doubling (#12077)
danny-avila Mar 5, 2026
d74a62e
🕰️ fix: Preserve `updatedAt` Timestamps During Meilisearch Batch Sync…
danny-avila Mar 5, 2026
c324a8d
⚡ refactor: Parallelize CI Workflows with Isolated Caching and Fan-Ou…
danny-avila Mar 5, 2026
5209f1d
⚡ refactor: Optimize Message Re-renders (#12097)
danny-avila Mar 6, 2026
3b84cc0
🧮 fix: XLSX/XLS Upload-as-Text via Buffer-Based SheetJS Parsing (#12098)
danny-avila Mar 6, 2026
a79f7ce
🤖 feat: GPT-5.4 and GPT-5.4-pro Context + Pricing (#12099)
danny-avila Mar 6, 2026
771227e
🏎️ refactor: Replace Sandpack Code Editor with Monaco for Artifact Ed…
danny-avila Mar 6, 2026
3a73907
📐 fix: Replace JS Image Scaling with CSS Viewport Constraints (#12089)
CavMCarolina Mar 6, 2026
cc3d62c
🛡️ fix: Add Permission Guard for Temporary Chat Visibility (#12107)
Airamhh Mar 6, 2026
6d0938b
🔒 refactor: Set `ALLOW_SHARED_LINKS_PUBLIC` to `false` by Default (#1…
ucodia Mar 7, 2026
b93d60c
🎞️ refactor: Image Rendering with Preview Caching and Layout Reservat…
danny-avila Mar 7, 2026
cfaa633
📦 chore: Bump `express-rate-limit` to v8.3.0 (#12115)
danny-avila Mar 7, 2026
2ac62a2
⛵ fix: Resolve Agent Provider Endpoint Type for File Upload Support (…
danny-avila Mar 7, 2026
4a8a5b5
🔒 fix: Hex-normalized IPv4-mapped IPv6 in Domain Validation (#12130)
danny-avila Mar 8, 2026
8b18a16
🏷️ chore: Remove Docker Images by Named Tag in `deployed-update.js` (…
danny-avila Mar 9, 2026
32cadb1
🩹 fix: MCP Server Recovery from Startup Inspection Failures (#12145)
danny-avila Mar 9, 2026
873f446
🕵️ fix: `remoteAgents` Field Omitted from Config (#12150)
Airamhh Mar 9, 2026
9cf3897
📦 chore: bump `mermaid` and `dompurify` (#12159)
danny-avila Mar 9, 2026
d179d0d
✨ v0.8.3
danny-avila Mar 9, 2026
49328ef
chore: Bump package versions and update configuration
danny-avila Mar 9, 2026
a6ce0e8
feat: Add OpenRouter headers to OpenAI configuration
danny-avila Mar 9, 2026
f8f5dc3
chore: Update package versions and dependencies
danny-avila Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ services:
environment:
- HOST=0.0.0.0
- MONGO_URI=mongodb://mongodb:27017/LibreChat
# - CHATGPT_REVERSE_PROXY=http://host.docker.internal:8080/api/conversation # if you are hosting your own chatgpt reverse proxy with docker
# - OPENAI_REVERSE_PROXY=http://host.docker.internal:8070/v1/chat/completions # if you are hosting your own chatgpt reverse proxy with docker
# - OPENAI_REVERSE_PROXY=http://host.docker.internal:8070/v1
- MEILI_HOST=http://meilisearch:7700

# Runs app on the same network as the service container, allows "forwardPorts" in devcontainer.json function.
Expand Down
101 changes: 81 additions & 20 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ TRUST_PROXY=1
# password policies.
# MIN_PASSWORD_LENGTH=8

# When enabled, the app will continue running after encountering uncaught exceptions
# instead of exiting the process. Not recommended for production unless necessary.
# CONTINUE_ON_UNCAUGHT_EXCEPTION=false

#===============#
# JSON Logging #
#===============#
Expand All @@ -61,20 +65,45 @@ CONSOLE_JSON=false
DEBUG_LOGGING=true
DEBUG_CONSOLE=false

# Enable memory diagnostics (logs heap/RSS snapshots every 60s, auto-enabled with --inspect)
# MEM_DIAG=true

#=============#
# Permissions #
#=============#

# UID=1000
# GID=1000

#==============#
# Node Options #
#==============#

# NOTE: NODE_MAX_OLD_SPACE_SIZE is NOT recognized by Node.js directly.
# This variable is used as a build argument for Docker or CI/CD workflows,
# and is NOT used by Node.js to set the heap size at runtime.
# To configure Node.js memory, use NODE_OPTIONS, e.g.:
# NODE_OPTIONS="--max-old-space-size=6144"
# See: https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-mib
NODE_MAX_OLD_SPACE_SIZE=6144

#===============#
# Configuration #
#===============#
# Use an absolute path, a relative path, or a URL

# CONFIG_PATH="/alternative/path/to/librechat.yaml"

#==================#
# Langfuse Tracing #
#==================#

# Get Langfuse API keys for your project from the project settings page: https://cloud.langfuse.com

# LANGFUSE_PUBLIC_KEY=
# LANGFUSE_SECRET_KEY=
# LANGFUSE_BASE_URL=

#===================================================#
# Endpoints #
#===================================================#
Expand Down Expand Up @@ -109,9 +138,13 @@ PROXY=
#============#

ANTHROPIC_API_KEY=user_provided
# ANTHROPIC_MODELS=claude-opus-4-20250514,claude-sonnet-4-20250514,claude-3-7-sonnet-20250219,claude-3-5-sonnet-20241022,claude-3-5-haiku-20241022,claude-3-opus-20240229,claude-3-sonnet-20240229,claude-3-haiku-20240307
# ANTHROPIC_MODELS=claude-sonnet-4-6,claude-opus-4-6,claude-opus-4-20250514,claude-sonnet-4-20250514,claude-3-7-sonnet-20250219,claude-3-5-sonnet-20241022,claude-3-5-haiku-20241022,claude-3-opus-20240229,claude-3-sonnet-20240229,claude-3-haiku-20240307
# ANTHROPIC_REVERSE_PROXY=

# Set to true to use Anthropic models through Google Vertex AI instead of direct API
# ANTHROPIC_USE_VERTEX=
# ANTHROPIC_VERTEX_REGION=us-east5

#============#
# Azure #
#============#
Expand All @@ -129,7 +162,6 @@ ANTHROPIC_API_KEY=user_provided
# AZURE_OPENAI_API_VERSION= # Deprecated
# AZURE_OPENAI_API_COMPLETIONS_DEPLOYMENT_NAME= # Deprecated
# AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME= # Deprecated
# PLUGINS_USE_AZURE="true" # Deprecated

#=================#
# AWS Bedrock #
Expand All @@ -141,7 +173,8 @@ ANTHROPIC_API_KEY=user_provided
# BEDROCK_AWS_SESSION_TOKEN=someSessionToken

# Note: This example list is not meant to be exhaustive. If omitted, all known, supported model IDs will be included for you.
# BEDROCK_AWS_MODELS=anthropic.claude-3-5-sonnet-20240620-v1:0,meta.llama3-1-8b-instruct-v1:0
# BEDROCK_AWS_MODELS=anthropic.claude-sonnet-4-6,anthropic.claude-opus-4-6-v1,anthropic.claude-3-5-sonnet-20240620-v1:0,meta.llama3-1-8b-instruct-v1:0
# Cross-region inference model IDs: us.anthropic.claude-sonnet-4-6,us.anthropic.claude-opus-4-6-v1,global.anthropic.claude-opus-4-6-v1

# See all Bedrock model IDs here: https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns

Expand All @@ -163,15 +196,23 @@ GOOGLE_KEY=user_provided
# GOOGLE_AUTH_HEADER=true

# Gemini API (AI Studio)
# GOOGLE_MODELS=gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash,gemini-2.0-flash-lite
# GOOGLE_MODELS=gemini-3.1-pro-preview,gemini-3.1-pro-preview-customtools,gemini-3.1-flash-lite-preview,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash,gemini-2.0-flash-lite

# Vertex AI
# GOOGLE_MODELS=gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash-001,gemini-2.0-flash-lite-001
# GOOGLE_MODELS=gemini-3.1-pro-preview,gemini-3.1-pro-preview-customtools,gemini-3.1-flash-lite-preview,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash-001,gemini-2.0-flash-lite-001

# GOOGLE_TITLE_MODEL=gemini-2.0-flash-lite-001

# Google Cloud region for Vertex AI (used by both chat and image generation)
# GOOGLE_LOC=us-central1

# Alternative region env var for Gemini Image Generation
# GOOGLE_CLOUD_LOCATION=global

# Vertex AI Service Account Configuration
# Path to your Google Cloud service account JSON file
# GOOGLE_SERVICE_KEY_FILE=/path/to/service-account.json

# Google Safety Settings
# NOTE: These settings apply to both Vertex AI and Gemini API (AI Studio)
#
Expand All @@ -191,6 +232,23 @@ GOOGLE_KEY=user_provided
# GOOGLE_SAFETY_DANGEROUS_CONTENT=BLOCK_ONLY_HIGH
# GOOGLE_SAFETY_CIVIC_INTEGRITY=BLOCK_ONLY_HIGH

#========================#
# Gemini Image Generation #
#========================#

# Gemini Image Generation Tool (for Agents)
# Supports multiple authentication methods in priority order:
# 1. User-provided API key (via GUI)
# 2. GEMINI_API_KEY env var (admin-configured)
# 3. GOOGLE_KEY env var (shared with Google chat endpoint)
# 4. Vertex AI service account (via GOOGLE_SERVICE_KEY_FILE)

# Option A: Use dedicated Gemini API key for image generation
# GEMINI_API_KEY=your-gemini-api-key

# Vertex AI model for image generation (defaults to gemini-2.5-flash-image)
# GEMINI_IMAGE_MODEL=gemini-2.5-flash-image

#============#
# OpenAI #
#============#
Expand Down Expand Up @@ -230,14 +288,6 @@ ASSISTANTS_API_KEY=user_provided
# More info, including how to enable use of Assistants with Azure here:
# https://www.librechat.ai/docs/configuration/librechat_yaml/ai_endpoints/azure#using-assistants-with-azure

#============#
# Plugins #
#============#

# PLUGIN_MODELS=gpt-4o,gpt-4o-mini,gpt-4,gpt-4-turbo-preview,gpt-4-0125-preview,gpt-4-1106-preview,gpt-4-0613,gpt-3.5-turbo,gpt-3.5-turbo-0125,gpt-3.5-turbo-1106,gpt-3.5-turbo-0613

DEBUG_PLUGINS=true

CREDS_KEY=f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0
CREDS_IV=e2341419ec3dd3d19b13a1a87fafcbfb

Expand All @@ -257,6 +307,7 @@ AZURE_AI_SEARCH_SEARCH_OPTION_SELECT=
# IMAGE_GEN_OAI_API_KEY= # Create or reuse OpenAI API key for image generation tool
# IMAGE_GEN_OAI_BASEURL= # Custom OpenAI base URL for image generation tool
# IMAGE_GEN_OAI_AZURE_API_VERSION= # Custom Azure OpenAI deployments
# IMAGE_GEN_OAI_MODEL=gpt-image-1 # OpenAI image model (e.g., gpt-image-1, gpt-image-1.5)
# IMAGE_GEN_OAI_DESCRIPTION=
# IMAGE_GEN_OAI_DESCRIPTION_WITH_FILES=Custom description for image generation tool when files are present
# IMAGE_GEN_OAI_DESCRIPTION_NO_FILES=Custom description for image generation tool when no files are present
Expand Down Expand Up @@ -294,10 +345,6 @@ FLUX_API_BASE_URL=https://api.us1.bfl.ai
GOOGLE_SEARCH_API_KEY=
GOOGLE_CSE_ID=

# YOUTUBE
#-----------------
YOUTUBE_API_KEY=

# Stable Diffusion
#-----------------
SD_WEBUI_URL=http://host.docker.internal:7860
Expand Down Expand Up @@ -466,6 +513,9 @@ OPENID_ADMIN_ROLE_TOKEN_KIND=
OPENID_USERNAME_CLAIM=
# Set to determine which user info property returned from OpenID Provider to store as the User's name
OPENID_NAME_CLAIM=
# Set to determine which user info claim to use as the email/identifier for user matching (e.g., "upn" for Entra ID)
# When not set, defaults to: email -> preferred_username -> upn
OPENID_EMAIL_CLAIM=
# Optional audience parameter for OpenID authorization requests
OPENID_AUDIENCE=

Expand All @@ -488,6 +538,8 @@ OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=
OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE="user.read" # example for Scope Needed for Microsoft Graph API
# Set to true to use the OpenID Connect end session endpoint for logout
OPENID_USE_END_SESSION_ENDPOINT=
# URL to redirect to after OpenID logout (defaults to ${DOMAIN_CLIENT}/login)
OPENID_POST_LOGOUT_REDIRECT_URI=

#========================#
# SharePoint Integration #
Expand Down Expand Up @@ -608,6 +660,9 @@ AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
AWS_BUCKET_NAME=
# Required for path-style S3-compatible providers (MinIO, Hetzner, Backblaze B2, etc.)
# that don't support virtual-hosted-style URLs (bucket.endpoint). Not needed for AWS S3.
# AWS_FORCE_PATH_STYLE=false

#========================#
# Azure Blob Storage #
Expand All @@ -622,7 +677,8 @@ AZURE_CONTAINER_NAME=files
#========================#

ALLOW_SHARED_LINKS=true
ALLOW_SHARED_LINKS_PUBLIC=true
# Allows unauthenticated access to shared links. Defaults to false (auth required) if not set.
ALLOW_SHARED_LINKS_PUBLIC=false

#==============================#
# Static File Cache Control #
Expand Down Expand Up @@ -665,6 +721,9 @@ HELP_AND_FAQ_URL=https://librechat.ai

# Enable Redis for caching and session storage
# USE_REDIS=true
# Enable Redis for resumable LLM streams (defaults to USE_REDIS value if not set)
# Set to false to use in-memory storage for streams while keeping Redis for other caches
# USE_REDIS_STREAMS=true

# Single Redis instance
# REDIS_URI=redis://127.0.0.1:6379
Expand Down Expand Up @@ -699,8 +758,10 @@ HELP_AND_FAQ_URL=https://librechat.ai
# REDIS_PING_INTERVAL=300

# Force specific cache namespaces to use in-memory storage even when Redis is enabled
# Comma-separated list of CacheKeys (e.g., ROLES,MESSAGES)
# FORCED_IN_MEMORY_CACHE_NAMESPACES=ROLES,MESSAGES
# Comma-separated list of CacheKeys
# Defaults to CONFIG_STORE,APP_CONFIG so YAML-derived config stays per-container (safe for blue/green deployments)
# Set to empty string to force all namespaces through Redis: FORCED_IN_MEMORY_CACHE_NAMESPACES=
# FORCED_IN_MEMORY_CACHE_NAMESPACES=CONFIG_STORE,APP_CONFIG

# Leader Election Configuration (for multi-instance deployments with Redis)
# Duration in seconds that the leader lease is valid before it expires (default: 25)
Expand Down
89 changes: 40 additions & 49 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,14 @@ Project maintainers have the right and responsibility to remove, edit, or reject

## 1. Development Setup

1. Use Node.JS 20.x.
2. Install typescript globally: `npm i -g typescript`.
3. Run `npm ci` to install dependencies.
4. Build the data provider: `npm run build:data-provider`.
5. Build data schemas: `npm run build:data-schemas`.
6. Build API methods: `npm run build:api`.
7. Setup and run unit tests:
1. Use Node.js v20.19.0+ or ^22.12.0 or >= 23.0.0.
2. Run `npm run smart-reinstall` to install dependencies (uses Turborepo). Use `npm run reinstall` for a clean install, or `npm ci` for a fresh lockfile-based install.
3. Build all compiled code: `npm run build`.
4. Setup and run unit tests:
- Copy `.env.test`: `cp api/test/.env.test.example api/test/.env.test`.
- Run backend unit tests: `npm run test:api`.
- Run frontend unit tests: `npm run test:client`.
8. Setup and run integration tests:
- Build client: `cd client && npm run build`.
5. Setup and run integration tests:
- Create `.env`: `cp .env.example .env`.
- Install [MongoDB Community Edition](https://www.mongodb.com/docs/manual/administration/install-community/), ensure that `mongosh` connects to your local instance.
- Run: `npx install playwright`, then `npx playwright install`.
Expand All @@ -48,11 +44,11 @@ Project maintainers have the right and responsibility to remove, edit, or reject
## 2. Development Notes

1. Before starting work, make sure your main branch has the latest commits with `npm run update`.
3. Run linting command to find errors: `npm run lint`. Alternatively, ensure husky pre-commit checks are functioning.
2. Run linting command to find errors: `npm run lint`. Alternatively, ensure husky pre-commit checks are functioning.
3. After your changes, reinstall packages in your current branch using `npm run reinstall` and ensure everything still works.
- Restart the ESLint server ("ESLint: Restart ESLint Server" in VS Code command bar) and your IDE after reinstalling or updating.
4. Clear web app localStorage and cookies before and after changes.
5. For frontend changes, compile typescript before and after changes to check for introduced errors: `cd client && npm run build`.
5. To check for introduced errors, build all compiled code: `npm run build`.
6. Run backend unit tests: `npm run test:api`.
7. Run frontend unit tests: `npm run test:client`.
8. Run integration tests: `npm run e2e`.
Expand Down Expand Up @@ -118,50 +114,45 @@ Apply the following naming conventions to branches, labels, and other Git-relate
- **JS/TS:** Directories and file names: Descriptive and camelCase. First letter uppercased for React files (e.g., `helperFunction.ts, ReactComponent.tsx`).
- **Docs:** Directories and file names: Descriptive and snake_case (e.g., `config_files.md`).

## 7. TypeScript Conversion
## 7. Coding Standards

For detailed coding conventions, workspace boundaries, and architecture guidance, refer to the [`AGENTS.md`](../AGENTS.md) file at the project root. It covers code style, type safety, import ordering, iteration/performance expectations, frontend rules, testing, and development commands.

## 8. TypeScript Conversion

1. **Original State**: The project was initially developed entirely in JavaScript (JS).

2. **Frontend Transition**:
- We are in the process of transitioning the frontend from JS to TypeScript (TS).
- The transition is nearing completion.
- This conversion is feasible due to React's capability to intermix JS and TS prior to code compilation. It's standard practice to compile/bundle the code in such scenarios.

3. **Backend Considerations**:
- Transitioning the backend to TypeScript would be a more intricate process, especially for an established Express.js server.

- **Options for Transition**:
- **Single Phase Overhaul**: This involves converting the entire backend to TypeScript in one go. It's the most straightforward approach but can be disruptive, especially for larger codebases.

- **Incremental Transition**: Convert parts of the backend progressively. This can be done by:
- Maintaining a separate directory for TypeScript files.
- Gradually migrating and testing individual modules or routes.
- Using a build tool like `tsc` to compile TypeScript files independently until the entire transition is complete.

- **Compilation Considerations**:
- Introducing a compilation step for the server is an option. This would involve using tools like `ts-node` for development and `tsc` for production builds.
- However, this is not a conventional approach for Express.js servers and could introduce added complexity, especially in terms of build and deployment processes.

- **Current Stance**: At present, this backend transition is of lower priority and might not be pursued.

## 8. Module Import Conventions

- `npm` packages first,
- from longest line (top) to shortest (bottom)

- Followed by typescript types (pertains to data-provider and client workspaces)
- longest line (top) to shortest (bottom)
- types from package come first

- Lastly, local imports
- longest line (top) to shortest (bottom)
- imports with alias `~` treated the same as relative import with respect to line length
2. **Frontend**: Fully transitioned to TypeScript.

**Note:** ESLint will automatically enforce these import conventions when you run `npm run lint --fix` or through pre-commit hooks.
3. **Backend**:
- The legacy Express.js server remains in `/api` as JavaScript.
- All new backend code is written in TypeScript under `/packages/api`, which is compiled and consumed by `/api`.
- Shared database logic lives in `/packages/data-schemas` (TypeScript).
- Shared frontend/backend API types and services live in `/packages/data-provider` (TypeScript).
- Minimize direct changes to `/api`; prefer adding TypeScript code to `/packages/api` and importing it.

---
## 9. Module Import Conventions

Imports are organized into three sections (in order):

1. **Package imports** — sorted from shortest to longest line length.
- `react` is always the first import.
- Multi-line (stacked) imports count their total character length across all lines for sorting.

2. **`import type` imports** — sorted from longest to shortest line length.
- Package type imports come first, then local type imports.
- Line length sorting resets between the package and local sub-groups.

3. **Local/project imports** — sorted from longest to shortest line length.
- Multi-line (stacked) imports count their total character length across all lines for sorting.
- Imports with alias `~` are treated the same as relative imports with respect to line length.

- Consolidate value imports from the same module as much as possible.
- Always use standalone `import type { ... }` for type imports; never use inline `type` keyword inside value imports (e.g., `import { Foo, type Bar }` is wrong).

**Note:** ESLint will automatically enforce these import conventions when you run `npm run lint --fix` or through pre-commit hooks.

Please ensure that you adapt this summary to fit the specific context and nuances of your project.
For the full set of coding standards, see [`AGENTS.md`](../AGENTS.md).

---

Expand Down
Loading