LobeChat Codebase Architecture Documentation#
Overview#
LobeChat is a modern, extensible, open-source chat framework for LLMs/AI, providing support for multiple AI providers (OpenAI, Claude, Gemini, Ollama, Bedrock, Azure, Mistral, Perplexity, and many more). Its architecture enables advanced features such as plugin-driven extensibility, agent marketplaces, file/knowledge base integration, multi-modal (vision, TTS/STT) capabilities, and both client-side and server-side database modes for persistent and scalable deployments.
The codebase is organized in a modular, layered fashion, optimized for maintainability and scalability. The primary technology stack consists of:
- Frontend/UI: React, Next.js, TypeScript, advanced UI component libraries
- Backend/API: Next.js server/edge functions, REST APIs, TRPC endpoints, custom plugin and model routing, multi-provider model invocation
- State/Data Management: Zustand-based stores, custom selectors, localStorage/browser DB and/or PostgreSQL-based server DB
- Extensibility: In-app and third-party plugins, API-driven agent market, user and provider configuration
High-Level Architecture#
The application is divided into several broad layers:
- Frontend (UI/UX): Interactive interfaces for chat, agents, providers, plugins, files, knowledge bases, settings, and more are built as modular React components in
src/app,src/features, andsrc/components. Mobile and desktop variants are supported. - Backend (API & Business Logic): All dynamic operations and integrations with AI models/providers, plugins, authentication, file storage, and database persistence run in Next.js server/edge API endpoints within
src/app/(backend), and additional logic is implemented insrc/serverandsrc/services. - State & Data Management: Client-side state is managed via Zustand; server-side via PostgreSQL and Drizzle ORM; data flows cleanly between frontend and backend through well-defined API/service boundaries.
- Modularity & Extensibility: Plugin system, agent marketplace, provider abstraction layers, and agent runtime support for many LLM backends enable the rapid extension and custom functionality via new models, plugins, and user agents.
- Deployment and Infrastructure: Flexible deployment options (Vercel, Docker/Docker Compose, etc.) and environment-based configuration for self-hosting and scalability.
Codebase Structure and Key Directories#
src/app/: Next.js / React app entrypoints, page and layout routing, main UI variants, authentication flows, chat workspace and input handling.src/server/: Backend service modules, API router implementations, edge/server handlers, and cross-cutting backend utilities.src/services/: Fine-grained business logic and service-layer abstractions, including chat, agent, plugin, user, session, knowledge base, file, and provider operations.src/features/: Feature modules (modular UI/logic), e.g., ChatInput, AgentSetting, FileManager, PluginStore, etc.src/store/: Zustand-based global and domain stores (chat, agent, knowledge base, file, tool, user, etc.), plus selectors and slices for state logic.src/libs/agent-runtime/: Unified abstraction for LLM provider integration (OpenAI, Anthropic, Ollama, Azure, etc.), handling all AI/LLM API interactions. Each subdirectory supports a separate provider.src/database/: Database schemas, migration, and client/server logic (Drizzle ORM) supporting both client-side and server-side DB.src/config/,src/const/,src/types/,src/utils/: Shared application-wide configuration, constants, type definitions, and utility functions.
System Flows & Core Modules#
1. Chat Flow#
- UI: User enters a prompt in the chat input (
src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput), which is routed through adaptive components for desktop/mobile, then toChatInput/DesktoporChatInput/Mobilefor advanced message composition and plugin/knowledge/file attachment. - State Management: Chat states (e.g., loading, composing, tool calls) are managed in
src/store/chat/slices/aiChat. - Service Layer: Message sending invokes chat service logic (
src/services/chat.ts) which:- Preprocesses messages (supports multi-modal, plugins, system roles)
- Determines provider and capabilities (via agent runtime or plugin dispatch)
- Manages streaming/completions, tool/plugin integration, and error/retry logic
- AI Provider Routing: Conversation is routed by the provider ID through the agent runtime abstraction (
src/libs/agent-runtime/AgentRuntime.ts), supporting multiple backend language model APIs and capabilities.
2. Agent & Provider Infrastructure#
- Agents: Agent configuration, settings, and UI (e.g., role, prompt, plugins) are managed modularly in
src/features/AgentSetting/*. Extension flows allow custom agent creation, sharing to the agent market, and internationalization. - Providers: Pluggable provider architecture supports dozens of LLM APIs, each with a dedicated implementation under
src/libs/agent-runtime. Dynamic initialization and credential/config management are supported per provider. - Model/Provider UI: Exposed in app settings, enabling end-users to configure new models/providers, select active model per chat, and tune parameters.
3. Plugin System#
- Plugin Loader & Store: The backend plugin store (
src/server/modules/PluginStore) manages plugin listings and dynamic loading. Plugins can be discovered/installed from remote registries and loaded in the UI via the PluginStore and corresponding UI feature modules (e.g.,src/features/PluginStore,src/features/PluginsUI). - Invocation: Plugins are invoked synchronously or asynchronously during chats, with tool-call/action payloads included in the message and resolved via relevant APIs (
src/services/plugin, plugin-related TRPC/edge/webapi routes). - Schema Handling: Plugins define schemas, exposed and processed for client or tool-call use (manifest validation, UI form generation, etc.).
4. File and Knowledge Base Integration#
- File Upload/UI: Managed in domain-specific UI modules (
src/features/FileManager,src/app/[variants]/(main)/files), supporting uploads, parsing, and chunking for RAG (retrieval-augmented generation). - Knowledge Base: Persistent storage, vectorization, similarity search, and in-chat reference are handled by a multi-layered system across
src/store/knowledgeBase,src/services/knowledgeBase.ts, and related feature modules.
5. Authentication & Multi-User Management#
- Options: Supports both NextAuth/JWT and Clerk as user/session/auth management solutions (
src/libs/next-auth,src/app/(backend)/api/auth). - Adapters: When server DB is enabled, NextAuth uses an ORM adapter (
src/libs/next-auth/adapter) for persistent session/user management. - Flexible Flows: Authentication state is connected to chat, agent, and file permissions through store selectors and service dispatch.
6. Data Layer and Persistence#
- Client DB: Local-first storage using IndexedDB or similar, with fast state sync via Zustand.
- Server DB: PostgreSQL, managed via Drizzle ORM and custom schema in
src/database, supporting full multi-device sync, file/object persistence, user state, and more. - Server/Client Mode Selection: Mode is controlled by deployment configuration.
7. Extensibility & Modularity#
- Adding Providers: Drop-in modules implementing the agent runtime interface; can be configured by users in app settings.
- Creating Agents: Modular agent templates, persisted either locally or in shared marketplaces, designed for remix/fork/workflow use.
- Plugins: Dynamically loadable, schema-driven; plugin market and user plugins supported. Plugin system supports function/tool calling and custom UI rendering.
Deployment & Environment Configuration#
LobeChat supports flexible deployment, including one-click Vercel deployment, Docker, Docker Compose, and custom environments. Environment variables control all secret keys, provider configs, auth, and DB setup.
- Environment variable docs:
docs/self-hosting/environment-variables.mdx - Database configuration:
docs/self-hosting/server-database.mdx
Architectural Highlights#
- Highly Type-Safe: Extensive TypeScript type coverage for all API interfaces, message flows, provider/plugin/agent configs.
- Next.js Routing & API Integration: Clever separation of UI, API (REST/edge/TRPC), and service logic.
- Provider/Plugin/Agent Abstractions: Unified agent runtime and modular plugin system enable high composability and extensibility.
- PWA/Responsive UX: Architecture is responsive by design, with PWA and mobile/touch-specific UI flows.
- Testability & Modularity: Components, runtime abstractions, and state slices are independently testable and swappable for new functionality.
Code/Doc References (Selected)#
README.mddocs/usage/start.mdxdocs/self-hosting/start.mdx- [
src/app/,src/server/,src/services/,src/features/,src/store/,src/libs/agent-runtime/,src/database/...) src/services/chat.tssrc/libs/agent-runtime/AgentRuntime.tssrc/server/modules/PluginStore/index.tssrc/features/AgentSetting/AgentSettings.tsx
LobeChat is designed for evolution and community-driven innovation—every module, provider, agent, and plugin is built with extension, customization, and high performance in mind.