Skip to main content
warning

This tutorial is a community contribution and is not supported by the Open WebUI team. It serves only as a demonstration on how to customize Open WebUI for your specific use case. Want to contribute? Check out the contributing tutorial.

[!WARNING]
This documentation was created based on the current version (0.5.11) and is constantly being updated.

Open-WebUI Internal SQLite Database

For Open-WebUI, the SQLite database serves as the backbone for user management, chat history, file storage, and various other core functionalities. Understanding this structure is essential for anyone looking to contribute to or maintain the project effectively.

Internal SQLite Location

You can find the SQLite database at root -> data -> webui.db

📁 Root (/)
├── 📁 data
│ ├── 📁 cache
│ ├── 📁 uploads
│ ├── 📁 vector_db
│ └── 📄 webui.db
├── 📄 dev.sh
├── 📁 open_webui
├── 📄 requirements.txt
├── 📄 start.sh
└── 📄 start_windows.bat

Copy Database Locally

If you want to copy the Open-WebUI SQLite database running in the container to your local machine, you can use:

docker cp open-webui:/app/backend/data/webui.db ./webui.db

Alternatively, you can access the database within the container using:

docker exec -it open-webui /bin/sh

Table Overview

Here is a complete list of tables in Open-WebUI's SQLite database. The tables are listed alphabetically and numbered for convinience.

No.Table NameDescription
01authStores user authentication credentials and login information
02channelManages chat channels and their configurations
03channel_memberTracks user membership and permissions within channels
04chatStores chat sessions and their metadata
05chatidtagMaps relationships between chats and their associated tags
06configMaintains system-wide configuration settings
07documentStores documents and their metadata for knowledge management
08feedbackCaptures user feedback and ratings
09fileManages uploaded files and their metadata
10folderOrganizes files and content into hierarchical structures
11functionStores custom functions and their configurations
12groupManages user groups and their permissions
13knowledgeStores knowledge base entries and related information
14memoryMaintains chat history and context memory
15messageStores individual chat messages and their content
16message_reactionRecords user reactions (emojis/responses) to messages
17migrate_historyTracks database schema version and migration records
18modelManages AI model configurations and settings
19promptStores templates and configurations for AI prompts
20tagManages tags/labels for content categorization
21toolStores configurations for system tools and integrations
22userMaintains user profiles and account information

Note: there are two additional tables in Open-WebUI's SQLite database that are not related to Open-WebUI's core functionality, that have been excluded:

  • Alembic Version table
  • Migrate History table

Now that we have all the tables, let's understand the structure of each table.

Auth Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier
emailString-User's email
passwordText-Hashed password
activeBoolean-Account status

Things to know about the auth table:

  • Uses UUID for primary key
  • One-to-One relationship with users table (shared id)

Channel Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEYUnique identifier (UUID)
user_idText-Owner/creator of channel
typeTextnullableChannel type
nameText-Channel name
descriptionTextnullableChannel description
dataJSONnullableFlexible data storage
metaJSONnullableChannel metadata
access_controlJSONnullablePermission settings
created_atBigInteger-Creation timestamp (nanoseconds)
updated_atBigInteger-Last update timestamp (nanoseconds)

Things to know about the auth table:

  • Uses UUID for primary key
  • Case-insensitive channel names (stored lowercase)

Channel Member Table

Column NameData TypeConstraintsDescription
idTEXTNOT NULLUnique identifier for the channel membership
channel_idTEXTNOT NULLReference to the channel
user_idTEXTNOT NULLReference to the user
created_atBIGINT-Timestamp when membership was created

Chat Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier (UUID)
user_idString-Owner of the chat
titleText-Chat title
chatJSON-Chat content and history
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp
share_idTextUNIQUE, nullableSharing identifier
archivedBooleandefault=FalseArchive status
pinnedBooleandefault=False, nullablePin status
metaJSONserver_default=""Metadata including tags
folder_idTextnullableParent folder ID

Chat ID Tag Table

Column NameData TypeConstraintsDescription
idVARCHAR(255)NOT NULLUnique identifier
tag_nameVARCHAR(255)NOT NULLName of the tag
chat_idVARCHAR(255)NOT NULLReference to chat
user_idVARCHAR(255)NOT NULLReference to user
timestampINTEGERNOT NULLCreation timestamp

Config

Column NameData TypeConstraintsDefaultDescription
idINTEGERNOT NULL-Primary key identifier
dataJSONNOT NULL-Configuration data
versionINTEGERNOT NULL-Config version number
created_atDATETIMENOT NULLCURRENT_TIMESTAMPCreation timestamp
updated_atDATETIME-CURRENT_TIMESTAMPLast update timestamp

Feedback Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEYUnique identifier (UUID)
user_idText-User who provided feedback
versionBigIntegerdefault=0Feedback version number
typeText-Type of feedback
dataJSONnullableFeedback data including ratings
metaJSONnullableMetadata (arena, chat_id, etc)
snapshotJSONnullableAssociated chat snapshot
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

File Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier
user_idString-Owner of the file
hashTextnullableFile hash/checksum
filenameText-Name of the file
pathTextnullableFile system path
dataJSONnullableFile-related data
metaJSONnullableFile metadata
access_controlJSONnullablePermission settings
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

The meta field's expected structure:

{
"name": string, # Optional display name
"content_type": string, # MIME type
"size": integer, # File size in bytes
# Additional metadata supported via ConfigDict(extra="allow")
}

Folder Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEYUnique identifier (UUID)
parent_idTextnullableParent folder ID for hierarchy
user_idText-Owner of the folder
nameText-Folder name
itemsJSONnullableFolder contents
metaJSONnullableFolder metadata
is_expandedBooleandefault=FalseUI expansion state
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

Things to know about the folder table:

  • Folders can be nested (parent_id reference)
  • Root folders have null parent_id
  • Folder names must be unique within same parent

Function Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier
user_idString-Owner of the function
nameText-Function name
typeText-Function type
contentText-Function content/code
metaJSON-Function metadata
valvesJSON-Function control settings
is_activeBoolean-Function active status
is_globalBoolean-Global availability flag
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

Things to know about the folder table:

  • type can only be: ["filter", "action"]

Group Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEY, UNIQUEUnique identifier (UUID)
user_idText-Group owner/creator
nameText-Group name
descriptionText-Group description
dataJSONnullableAdditional group data
metaJSONnullableGroup metadata
permissionsJSONnullablePermission configuration
user_idsJSONnullableList of member user IDs
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

Knowledge Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEY, UNIQUEUnique identifier (UUID)
user_idText-Knowledge base owner
nameText-Knowledge base name
descriptionText-Knowledge base description
dataJSONnullableKnowledge base content
metaJSONnullableAdditional metadata
access_controlJSONnullableAccess control rules
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

The access_control fields expected structure:

{
"read": {
"group_ids": ["group_id1", "group_id2"],
"user_ids": ["user_id1", "user_id2"]
},
"write": {
"group_ids": ["group_id1", "group_id2"],
"user_ids": ["user_id1", "user_id2"]
}
}

Memory Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier (UUID)
user_idString-Memory owner
contentText-Memory content
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

Message Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEYUnique identifier (UUID)
user_idText-Message author
channel_idTextnullableAssociated channel
parent_idTextnullableParent message for threads
contentText-Message content
dataJSONnullableAdditional message data
metaJSONnullableMessage metadata
created_atBigInteger-Creation timestamp (nanoseconds)
updated_atBigInteger-Last update timestamp (nanoseconds)

Message Reaction Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEYUnique identifier (UUID)
user_idText-User who reacted
message_idText-Associated message
nameText-Reaction name/emoji
created_atBigInteger-Reaction timestamp

Model Table

Column NameData TypeConstraintsDescription
idTextPRIMARY KEYModel identifier
user_idText-Model owner
base_model_idTextnullableParent model reference
nameText-Display name
paramsJSON-Model parameters
metaJSON-Model metadata
access_controlJSONnullableAccess permissions
is_activeBooleandefault=TrueActive status
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

Prompt Table

Column NameData TypeConstraintsDescription
commandStringPRIMARY KEYUnique command identifier
user_idString-Prompt owner
titleText-Prompt title
contentText-Prompt content/template
timestampBigInteger-Last update timestamp
access_controlJSONnullableAccess permissions

Tag Table

Column NameData TypeConstraintsDescription
idStringPK (composite)Normalized tag identifier
nameString-Display name
user_idStringPK (composite)Tag owner
metaJSONnullableTag metadata

Things to know about the tag table:

  • Primary key is composite (id, user_id)

Tool Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier
user_idString-Tool owner
nameText-Tool name
contentText-Tool content/code
specsJSON-Tool specifications
metaJSON-Tool metadata
valvesJSON-Tool control settings
access_controlJSONnullableAccess permissions
created_atBigInteger-Creation timestamp
updated_atBigInteger-Last update timestamp

User Table

Column NameData TypeConstraintsDescription
idStringPRIMARY KEYUnique identifier
nameString-User's name
emailString-User's email
roleString-User's role
profile_image_urlText-Profile image path
last_active_atBigInteger-Last activity timestamp
updated_atBigInteger-Last update timestamp
created_atBigInteger-Creation timestamp
api_keyStringUNIQUE, nullableAPI authentication key
settingsJSONnullableUser preferences
infoJSONnullableAdditional user info
oauth_subTextUNIQUEOAuth subject identifier

Entity Relationship Diagram

To help visualize the relationship between the tables, refer to the below Entity Relationship Diagram (ERD) generated with Mermaid.