All notable changes to Chainlit will be documented in this file.
The format is based on Keep a Changelog.
- Pass
chat_profiletoset_starter_categoriescallback so starters can vary by profile
- Guard
on_chat_startagainst duplicate dispatch on WebSocket reconnect - Check
langchain-coreversion instead oflangchainfor callback compatibility - Resolve base locale codes to regional translation files (e.g.
da→da-DK)
- Refactor dev scripts for streamlined local development
- Upgrade Prettier and Ruff and auto-format missed files
- Add copilot sidebar mode with drag-to-resize and persisted display preferences
- Add
polars.DataFramesupport forDataframeelements - Replace the iframe PDF preview with an improved built-in PDF viewer
- Allow
Stepmessages to use Lucide icons instead of the default avatar - Make the stop icon and loading cursor customizable via CSS variables
- Add Portuguese (
pt-PT) translations - Make Azure AD OAuth scopes configurable via environment variables
- Add
ChatSettings.refresh()soon_settings_editcan refresh widgets without committing session settings
- Sort thread history month categories by actual date and locale
- Clear pending attachments when switching chat profiles
- Handle Slack workflow and bot
app_mentionevents correctly - Show error toasts when Streamable HTTP MCP connections fail
- Harden MCP cleanup to avoid cross-task cancel-scope errors during connect, disconnect, and reconnect
- Respect disabled state for date picker, multiselect, tags, and radio chat settings widgets
- Restore chat settings values and schema correctly after live edits, reset, or cancel
- Send slash-command input on Enter when no registered command matches
- Preserve live favorite message state and fix accordion closing behavior
- Respect explicit Plotly figure heights in rendered elements
- Make
send_toast()asynchronous and improve LangChain 1.x cache compatibility - Prevent thread metadata
NULLviolations while preserving metadata merges in built-in data layers - Treat an empty
custom_fontsarray as removing default fonts - Use the correct logging format specifier during OAuth state validation
- Widen dependency compatibility for OpenAI 2.x, LangChain 1.x, Transformers 5.x, Plotly 6.x, and related packages
- Upgrade repo linting to ESLint 10 and make
pdfjs-distan explicit frontend dependency
- Security vulnerability in Chainlit: validate WebSocket session restore against the authenticated user
- Move npm library publishing to OIDC Trusted Publishing
- Add starter categories for grouped starters
- Always show the favorite messages button with an empty state
- Add option to disable rendering markdown in user messages
- Allow easy deletion of favorites
- Make state cookie lifetime configurable via env var
- Add Arabic translation
- Add Danish translation
- Add settings change listener
- Add image preview
- Add selected option for command pre-selection
- Add
auto_collapseparameter toStep - Add
/healthendpoint for container orchestration - Add
hiddenoption fordefault_sidebar_state - Make avatar size configurable via
config.toml
- Reorder chat history sidebar after messages in existing chats
- Use login error detail for credential failures
- Convert UUID fields to strings in feedback extraction
- Preserve thread metadata when updated without metadata
- Reset audio UI when microphone permission is denied
- Fix sidebar inset overflow causing horizontal scroll
- Prevent empty strings from overwriting step content on upsert
- Use correct URL scheme when SSL is configured
- Allow skip new chat creation
- Add data picker input widget
- Toggle chat settings in sidebar instead of composer
- Fix: Starters now correctly use the selected/default mode if configured
- Add favorite messages (prompt templates)
- Fix: Starters now correctly use the selected/default mode if configured
- Add an icon for shared thread
- New option to allow disabling auto scroll of assistant messages
- Add modes: you may allow users to select an LLM model, a mode (for example, planning), allow to enable reasoning etc.
- Breaking change: you need to run
ALTER TABLE steps ADD COLUMN IF NOT EXISTS modes JSONB;for migration
- Breaking change: you need to run
- Fix tiny avatar for long messages
- Security vulnerability in Chainlit: added missed sanitization to custom elements update endpoint
- Bumped watchfiles version
- Add tests for oauth providers and messages
- Merge metadata in chainlit data layer
- Add native video support in markdown rendering
- Optimize chat message rendering
- Add language configuration option to config.toml
- Upgrade langchain imports for v1 compatibility
- Improve icon name formatting issues
- Fixed page blinking issue with header_auth
- Set environ when restoring websocket session
- Move hello.py to avoid import issues
- Fix issue showing thread sharing when disabled
- Disable Chainlit from setting logging globally
- Add tests for socket, chat context, cache, translations & oauth providers
- Fix copilot breaking change introduced in 2.8.5
- Add support for tabs in chat settings
- Support markdown in watermark
- Add italian translation to translations folder
- Add query param prefill for chat
- Add tests for utils, markdown, sidebar, chat settings, mcp, input widget, langchain, elements, steps, and actions
- Add better support for Multi-Agent implementations
- Nested steps are now step.input -> child step -> step.output
- Improved formatting and styling of Tasklist
- Add display_name to ChatProfile
- Add slack reaction event callback
- Add raw response from OAuth providers
- Security vulnerability in Chainlint: added missed ACL check for session initialization
- Remove FastAPI version restrictions
- Add support for GitHub Enterprise OAuth provider
- Explicit disable on input widgets
- Tasklist tasks are now properly reconnected to their steps/messages
- ci: fix pnpm publish checks
- fix: missing / in url with base path when connecting Streamable HTTP MCP
- fix - persist custom_elements to data layer without cloud storage
- fix: propagate IME composition events in AutoResizeTextarea
- fix: confirm when enter
- Fix(translation): correct French translation of chat watermark
- fix(ui): add fallback logo if custom logo is missing
- Support for the
targetattribute in header links, which can be configured through the configuration options
@chainlit/react-clientautomatic publishing
- Remove autofocus in mobile message composer
- Improve error handling in sqlalchemy data layer
get_read_url()
- Fix voice hotkey (P) triggering when typing in chat input
- Properly finalize data layers
- Fix
on_chat_startnot always firing
- Add German and Korean translations
- Add support for custom_meta_url in config.toml
cl.on_thread_share_viewwill allow shared thread viewing if it returnsTrueto enable custom/admin viewing.
- Removed redundant message sending in Slack when images are present.
- Generate signed url when loading elements using SQLAlchemy data layer.
- Add ability to share threads. See documentation for how to enable it.
- Add new chat settings: multi-select, radio-group, and checkbox
- Add optional language parameter to set_starters
- Add neutral Spanish translation
- Allow sending commands from custom elements
- Reordered message composer elements
- Default to plaintext code blocks for unsupported languages like CSV
- Sort threads by updated_at field
- Replace hardcoded strings with translation keys
- GCP storage provider dependency is now optional
- CI/CD fixes
- Fixed issues with hot-reloading in dev mode (
-wflag) - Take overridden config into account in audio handlers
- Added LiteralAI data layer deprecation warning
- Added context to
@cl.on_feedbackcallback - Added Traditional Chinese (Taiwan) translations
- Added configurable user_env persistence to database
- New
persist_user_envandmask_user_envfield inconfig.toml
- New
- Added new command translations to all languages
- Added CODEOWNERS
- Improved dynamic config overrides for chat profiles
- Import GCSStorageClient only when needed to avoid requiring optional dependencies
- Updated CONTRIBUTING.md for
uvusage
- Fix publishing to include frontend and copilot folders
- Fix publishing to work with uv
- New ChatGPT-style command selection and improve message input handling
- Added the ability to override certain config.toml settings for Chat Profiles, so some profiles can have MCP and some can't for example. Documentation Updated.
- You must now explicity enable audio and MCP as these are no longer inferred by the presence of
on_audio_startoron_mcp_connectcallbacks - Delete your
config.toml, runchainlit init, and update your settings
- You must now explicity enable audio and MCP as these are no longer inferred by the presence of
- Added copilot setup instructions for GitHub Copilot SWE Agent
- Added Slack socket mode support
- AskFileButton can now upload file with proper checking and it's own limits
- Added content-disposition metadata to azure blob uploads to persist download file name
- Migrated from poetry to uv
- Changed thread sorting to use updated time instead of creation time
- Add missing headers when connecting Streamable HTTP MCP
- Remove undocumented
CHAINLIT_CUSTOM_AUTHenvironment variable used in Copilot
- Add GitHub Copilot instructions for automated PRs
- (Slack) Add threadId for user feedback
- (Copilot) Add new optional opened property has been added to the widget config
- Fix blinking cursor indicator
- (Copilot) Rename copilot inner div id
chainlit-copilottochainlit-copilot-chatdue to naming conflict with the outer div - Disable gzip for websocket-relaed http endpoint (Safari compatibility)
- Prevent constant refresh on the login screen when using custom authenication
- Fix MCP type hints
- Reverted PR with newline preservation in messages due to incorrect rendering in child components like lists
- Formatting when pasting HTML code and newlines in received messages
- Add support for emoji reaction on message received in Slack
- Add Greek translation
- Copy both plain text and rich text to clipboard, if available (rich text pasting to editors like Word)
- Rename
CHAINLIT_COOKIE_PATHtoCHAINLIT_AUTH_COOKIE_PATHand now espect CHAINLIT_ROOT_PATH - Add language parameter to Copilot widget configuration
- Prevent HTML code in user message to be rendered as HTML instead of displaying as code
- Properly parse
user_envwhenconfig.project.user_envis empty
- Properly escape HTML on paste
- Enable gzip compression for frontend
- Address security vulnerabilities in dependencies by upgrading them to the closest safe versions
- CI e2e tests and pnpm cache issues
- Add streamable HTTP MCP support
- Improve e2e test stability and performance
- Add configuration for expanded copilot mode
- Add French translation
- Fix inputs/outputs for langchain callbacks
- Fix blinking indicator for in-progress steps
- Avoid unnecessary logo fetching when supplied in config.toml
- Bump dependencies
- Ability to send empty commands
- Wider element view in copilot and improved styling
- Support signed urls for elements using dynamoDB persistence
- Support additional connection arguments in SQLAlchemy data layer
- Added
CHAINLIT_COOKIE_PATHenvironment variable to set the cookie path
- Message inputs formatting
- Language pattern to allow
tzm-Latn-DZ - Properly encode parentheses in markdown links
- Fix chainlit data layer metadata upserts
- Improve database connection handling
- Fixed cookie path
- Improve lanchain callbacks
- Improve robustness of E2E tests
- Removed watermark "Built with Chainlit"
Technical release due to missed frontend and copilot folders in previous one.
- New
on_feedbackcallback - Relaxed restriction on number of starters (now more than 4 can be displayed)
- Command persistence when
"button": Trueis missing from command definition openaiandmistralaisub-modules fail due to incorrecttimestamp_utcimport- Temporarily reverted fix caused the following issues with Chainlit data layer:
null value in column "metadata" of relation "Thread"syntax error at or near ";"
- Google Cloud Storage private bucket support in Chainlit data layer
- Portals (popups, dialogs, etc.) now render correctly inside Copilot's shadow DOM
- Removed telemetry
- Updated versions for Node.js, Poetry, and pnpm; added Corepack support
- Add commands to starters
- Collapse command buttons to icons for small screens
- Add timegated custom elements
- Added ADC support for google cloud storage adapter
- Added scope as env variable (
OAUTH_COGNITO_SCOPE) to Cognito auth provider - Add MarkdownAlert Style Switcher. Control via
alert_styleinconfig.toml. - Allow custom s3 endpoint for the official data layer
- Added container prop to dialog portal in Copilot shadow DOM
- Bump dependencies
- Add python 3.13 support
- Fix chat input double-spacing issue
- Resolve python deprecation warning for utc_now() and logger.warn
- Fixed an issue where the portal for the ChatProfiles selector was being rendered outside the Copilot shadow DOM
- Add mime type to element emitter
- Handle float/Decimal conversion for DynamoDB persistence
- Fix cancel button in Chat settings
- Only update thread metadata when not empty
- LiteralAI is being sunset and will be removed in one of the next releases. Please migrate to the official data layer instead.
- Telemetry is now opt-in by default and will be removed in the next release.
- Avatars now support
.in their name (will be replaced with_). - Typed session accessors for user session
- Allow set attributes for the tags of the custom_js or custom_css
- Hovering a past chat in the sidebar will display the full title of the chat in a tooltip
- The
X-Chainlit-Session-idheader is now automatically set to facilitate sticky sessions with websockets cl.ErrorMessagenow have a different avatar- The copy button is now only displayed on the final message of a run, like feedback buttons
- CopilotFunction is now usable in custom JS
- Header link now have an optional
display_nameto display text next to the icon - The default .env file loaded by chainlit is now configurable with
CHAINLIT_ENV_FILE
- [breaking]:
http_referer,http_cookieandlanguagesare no longer directly available in the session object. Instead,environis available containing all of those plus other HTTP headers - The scroll to the bottom animation is now smooth
@cl.on_app_startupand@cl.on_app_shutdown- Configuration option for chat history default open state
- Configuration option for login page background image and filter
- Most commonly customized ui elements now have specific IDs
- App should no longer flicker on load
- Attachments icons for microsoft files should now correctly display
- Pasting should no longer be duplicated
- Add thinking token support to langchain callback handler
- Pasting issues in the chat input
- Rename nl-NL.json to nl.json
- Mcp button should not be displayed if
@on_mcp_connectis not defined
- Canvas mode for the element side bar if title ==
canvas - Allow list for MCP stdio commands
keyparameter toElementSidebar.set_elementsmethod
- Literal AI should now correctly store custom elements props
- Element should correctly load from azure storage
- Plotly elements should now take full width
- Hide commands button if all commands are specified as button.
- Chat profiles tooltip should no longer freeze is hover rapidly
- The user message auto scroll behavior is now a feature
config.features.user_message_autoscroll - Stdio MCP commands now support environment variables
- Submounting a Chainlit app to a FastAPI app with a root path should now work
- Chainlit now requires python
>=3.10
- MCP support through
@cl.on_mcp_connectand@cl.on_mcp_disconnect
- Pasting text/images into Chainlit Copilot should now work
- OAuth redirection should work when submounting Chainlit with root path
/ - Successive AskUser messages should no longer collide
- Outdated Haystack integration
- New user messages are now placed/scrolled to the top of the chat to enhance readability
- Commands have a new optional boolean field
buttonto turn them into buttons - Custom elements have access to a new API
sendUserMessage
- Chainlit app using a custom root path should now work correctly when running in docker containers
- Chat history time groups should now be sorted properly
default_openparameter to the step decorator/class
- Input should not replace <,>,&
- Starters should be disabled if no ws connection
- Prevent orphaned thread record when deleting active conversation
- You can now add custom buttons in the header
- Step open/close is now animated
- prevent unstyled flash when streaming code blocks
- Docking/undocking scroll while streaming show now work better
- The default loader should now be displayed if the chat is running and no response is yet sent
- Pasting HTML in the chat input show now work
- React warnings and accessibility issues
- Command filtering now works with
includesinstead ofstartWith - The submit button should be disabled in the chat input is empty
- Reintroduce including URL location after UI refactor
- Ensure SAS token start time is set to UTC
- Prevent showing 0's on resumed thread if AskAction/File was used
- Remove 22px element ref height
- Update Microsoft OAuth offline_access scope to be fully qualified with the prefix
- You can now send toasts with
cl.context.emitter.send_toast - Markdown now supports alerts
- Theme options are now translatable
- Copilot can now load custom css
- Mounting Chainlit as a sub app should no longer break the parent's app endpoints
- Pasting text in the chat input should now remove extra formatting and preserve new lines
- Data layer initialization to the telemetry
- Gap between the word
Usedand tool name in step name
- Chat input should now auto focus
- When unfolding a step, the
Outputtitle should only show if there is an input to display
- Element sidebar should take full height
- The element sidebar is now controllable from the python code
- The auth cookie no longer has a maximal size
- Pasting text in the chat input should now work
- Long text in AskAction buttons are now gracefully displayed
- Server connection error translation path
- Chat GPT like commands
- Translation options. The translation schema has been simplified
- Warnings around file upload mime types
uvicornandpackagingversion requirement have been relaxed
- Overhaul element reference link styling
- Japanese translations
- Improved Chinese translations
- Translations for feedback buttons
- Cookie max age should now correctly use the config
user_session_timeoutfield - Thread grouping in the chat history should now correctly handle timezones
- File from
AskFileMessageshould now share ID with the data layer - Data layer boolean casting issues
- Chat settings modal scrolling issue
CustomElement.update()to update a custom element props server side- Translation for the copy button
- The official data layer should not overwrite elements anymore
- A bug where resuming a thread would not load the thread
- Prevent authentication before the app is fully loaded
- Installing Chainlit from github should work again
toolsteps should count as a thread start
http_cookieis now available in the user session and websocket session
- Chat profile description on the welcome screen now supports custom html and latex
- Thread history batch size has been increased to 35 to ensure scroll on a taller screens
- Chat settings modal should now scroll if too tall
- Errors in thread resume (like thread not found) now properly redirects to the the home page
- Elements like Dataframe, Plotly or text should now load correctly from cloud storages
- AskFileMessage is now usable even if spontaneous uploads are disabled
- Remove element objects from cloud storage on thread removal (Official & SQLAlchemy data layers)
- Fix custom element
propsstorage for SQL Alchemy data layer
window.toggleChainlitCopilot()to toggle the copilot
- Chat profiles icon and description should now be displayed on the welcome screen
- Action should be able to trigger the first interaction
- Raw code blocks should now be displayed correctly
- TextInput for chat settings should now work
- Upload attachement button should not be displayed when upload is disabled
- Removed unused numpy dependency
The Chainlit UI (including the copilot) has been completely re-written with Shadcn/Tailwind. This brings several advantages:
- The codebase is simpler and more contribution friendly.
- It enabled the new custom element feature.
- The theme customisation is more powerful.
- Custom Elements (code your own elements)
Cmd+kthread search- Thread rename
- Official PostGres open source data layer
- New
@data_layerdecorator for configuring custom data layers declaratively
- Authentication is now based on cookies. Cross Origins are disallowed unless added in
allow_originsin theconfig.tomlfile - No longer need to click on
resumeto resume a thread - [breaking]: Theme customisation is now handled in
public/theme.jsoninstead ofconfig.toml. - [breaking]: Changed fields on the
Actionclass:- The
valuefield has replaced withpayloadwhich accepts a Python dict - The
descriptionfield has been renamedtooltip - The field
iconhas been added - The
collapsedfield has been removed.
- The
- [breaking]: Completely revamped audio implementation (#1401, #1410):
- Replaced
AudioChunkwithInputAudioChunkandOutputAudioChunk - Changed default audio sampling rate from 44100 to 24000
- Removed several audio configuration options (
min_decibels,initial_silence_timeout,silence_timeout,chunk_duration,max_duration)
- Replaced
- Autoscaling of Chainlit app behind a load balancer should now work. Don't forget to enable sticky sessions
Pre-release: developer preview.
- New
@data_layerdecorator for configuring custom data layers declaratively - Unit tests for
get_data_layer()and@data_layerfunctionality
- Data layer configuration system now prioritizes
@data_layerdecorator over environment variables - Data layer initialization is now more explicit and testable through the decorator pattern
- Updated example code in
/cypress/e2e/custom_data_layerand/cypress/e2e/data_layerto use the new decorator
- Improved test infrastructure with new fixtures for data layer mocking
- Added comprehensive tests for data layer configuration scenarios
IMPORTANT:
- This release drops support for FastAPI versions before 0.115.3 and Starlette versions before 0.41.2 due to a severe security vulnerability (CVE-2024-47874). We strongly encourage all downstream dependencies to upgrade as well.
- This release still contains a known security vulnerability in the element feature that could allow unauthorized file access. We strongly recommend against using elements in production environments until a comprehensive fix is implemented in an upcoming release.
- [breaking] Updated dependencies to address critical issues (#1493):
- Upgraded fastapi to 0.115.3 to address CVE-2024-47874 in Starlette
- Upgraded starlette to 0.41.2 (required for security fix)
- Upgraded werkzeug to 3.0.6
Note: This is a breaking change as older FastAPI versions are no longer supported. To prioritize security, we opted to break with semver on this particular occasion.
- Resolved incorrect message ordering in UI (#1501)
IMPORTANT:
- The element feature currently contains a known security vulnerability that could allow unauthorized file access. We strongly recommend against using elements in production environments until a comprehensive fix is implemented in an upcoming release.
- [breaking]: Completely revamped audio implementation (#1401, #1410):
- Replaced
AudioChunkwithInputAudioChunkandOutputAudioChunk - Changed default audio sampling rate from 44100 to 24000
- Removed several audio configuration options (
min_decibels,initial_silence_timeout,silence_timeout,chunk_duration,max_duration) - Removed
RecordScreencomponent
- Replaced
- Factored storage clients into separate modules (#1363)
- Realtime audio streaming and processing (#1401, #1406, #1410):
- New
AudioPresencecomponent for visual representation - Implemented
WavRecorderandWavStreamPlayerclasses - Introduced new
on_audio_startcallback - Added audio interruption functionality
- New audio connection signaling with
onandoffstates
- New
- Interactive DataFrame display with auto-fit content using MUI Data Grid (#1373, #1467)
- Optional websocket connection in react-client (#1379)
- Enhanced image interaction with popup view and download option (#1402)
- Current URL included in message payload (#1403)
- Allow empty chat input when submitting attachments (#1261)
- Various backend fixes and cleanup (#1432):
- Use importlib.util.find_spec to check if a package is installed
- Use
raise... fromto wrap exceptions - Fix error message in Discord integration
- Several minor fixups/cleanup
- Implemented ruff for linting and formatting (#1495)
- Added mypy daemon for faster type-checking (#1495)
- Added GitHub Actions linting (#1445)
- Enabled direct installation from GitHub (#1423)
- Various build script improvements (#1462)
- IMPORTANT: This release temporarily reverts the file access security improvements from 1.3.0 to restore element functionality. The element feature currently has a known security vulnerability that could allow unauthorized access to files. We strongly recommend against using elements in production environments until the next release.
- A comprehensive security fix will be implemented in an upcoming release.
- Reverted authentication requirements for file access endpoints to restore element functionality (#1474)
- Work in progress on implementing HTTP-only cookie authentication for proper security (#1472)
- Fixed critical endpoint security vulnerabilities (#1441)
- Enhanced authentication for file-related endpoints (#1431)
- Upgraded frontend and backend dependencies to address security issues (#1431)
- SQLite support in SQLAlchemy integration (#1319)
- Support for IETF BCP 47 language tags, enabling localized languages like es-419 (#1399)
- Environment variables
OAUTH_<PROVIDER>_PROMPTandOAUTH_PROMPTto override oauth prompt parameter. Enabling users to explicitly enable login/consent prompts for oauth, e.g.OAUTH_PROMPT=consentto prevent automatic re-login. (#1362, #1456). - Added
get_element()method to SQLAlchemyDataLayer (#1346)
- Bumped LiteralAI dependency to version 0.0.625 (#1376)
- Optimized LiteralDataLayer for improved performance and consistency (#1376)
- Refactored context handling in SQLAlchemy data layer (#1319)
- Updated package metadata with correct authors, license, and documentation links (#1413)
- Enhanced GitHub Actions workflow with restricted permissions (#1349)
- Resolved dialog boxes extending beyond window bounds (#1446)
- Fixed tasklist functionality when Chainlit is submounted (#1433)
- Corrected handling of
display_namein PersistentUser during authentication (#1425) - Fixed SQLAlchemy identifier quoting (#1395)
- Improved spaces handling in avatar filenames (#1418)
- Implemented extensive test coverage for LiteralDataLayer and SQLAlchemyDataLayer
- Added comprehensive unit tests for file-related endpoints
- Enhanced code organization and import structure
- Improved Python code style and linting (#1353)
- Resolved various small text and documentation issues (#1347, #1348)
- Fixed critical vulnerabilities allowing arbitrary file read access (#1326)
- Improved path traversal protection in various endpoints (#1326)
- Hebrew translation JSON (#1322)
- Translation files for Indian languages (#1321)
- Support for displaying function calls as tools in Chain of Thought for LlamaIndexCallbackHandler (#1285)
- Improved feedback UI with refined type handling (#1325)
- Upgraded cryptography from 43.0.0 to 43.0.1 in backend dependencies (#1298)
- Improved GitHub Actions workflow (#1301)
- Enhanced data layer cleanup for better performance (#1288)
- Factored out callbacks with extensive test coverage (#1292)
- Adopted strict adherence to Semantic Versioning (SemVer)
- Websocket connection issues when submounting Chainlit (#1337)
- Show_input functionality on chat resume for SQLAlchemy (#1221)
- Negative feedback class incorrectness (#1332)
- Interaction issues with Chat Profile Description Popover (#1276)
- Centered steps within assistant messages (#1324)
- Minor spelling errors (#1341)
- Added documentation for release engineering process (#1293)
- Implemented testing for FastAPI version matrix (#1306)
- Removed wait statements from E2E tests for improved performance (#1270)
- Bumped dataclasses to latest version (#1291)
- Ensured environment loading before other imports (#1328)
- [breaking]: Listen to 127.0.0.1 (localhost) instead on 0.0.0.0 (public) (#861).
- [breaking]: Dropped support for Python 3.8, solving dependency resolution, addressing vulnerable dependencies (#1192, #1236, #1250).
- Frontend connection resuming after connection loss (#828).
- Gracefully handle HTTP errors in data layers (#1232).
- AttributeError: 'ChatCompletionChunk' object has no attribute 'get' in llama_index (#1229).
edit_messagein correct place in default config, allowing users to edit messages (#1218).
CHAINLIT_APP_ROOTenvironment variable to modifyAPP_ROOT, enabling the ability to set the location ofconfig.tomland other setting files (#1259).- Poetry lockfile in GIT repository for reproducible builds (#1191).
- pytest-based testing infrastructure, first unit tests of backend and testing on all supported Python versions (#1245 and #1271).
- Black and isort added to dev dependencies group (#1217).
- Langchain Callback handler IndexError
- Attempt to fix websocket issues
- The
Userclass now has adisplay_namefield. It will not be persisted by the data layer. - The logout button will now reload the page (needed for custom auth providers)
- Directly log step input args by name instead of wrapping them in "args" for readability.
- Langchain Callback handler ValueError('not enough values to unpack (expected 2, got 0)')
- hide_cot becomes cot and has three possible values: hidden, tool_call, full
- User feedback are now scoring an entire run instead of a specific message
- Slack/Teams/Discord DM threads are now split by day
- Slack DM now also use threads
- Avatars are always displayed at the root level of the conversation
- disable_feedback has been removed
- root_message has been removed
- Messages are now editable. You can disable this feature with
config.features.edit_message = false cl.chat_contextto help keeping track of the messages of the current thread- You can now enable debug_mode when mounting Chainlit as a sub app by setting the
CHAINLIT_DEBUGtotrue.
- Message are now collapsible if too long
- Only first level tool calls are displayed
- OAuth redirection when mounting Chainlit on a FastAPI app should now work
- The Langchain callback handler should better capture chain runs
- The Llama Index callback handler should now work with other decorators
- Mistral AI instrumentation
- OAuth final redirection should account for root path if provided
- OAuth URL redirection should be correctly formed when using CHAINLIT_URL + submounted chainlit app
- Width and height option for the copilot bubble
- Chat profile icon in copilot should load
- Theme should work with Copilot
- Running toast when an action is running
- Azure AD oauth get_user_info not implemented error
@cl.set_startersandcl.Starterto suggest conversation starters to the user- Teams integration
- Expand copilot button
- Debug mode when starting with
-d. Only available if the data layer supports it. This replaces the Prompt Playground. defaulttheme config inconfig.toml- If only one OAuth provider is set, automatically redirect the user to it
- Input streaming for tool calls
- [BREAKING] Custom endpoints have been reworked. You should now mount your Chainlit app as a FastAPI subapp.
- [BREAKING] Avatars have been reworked.
cl.Avatarhas been removed, instead place your avatars by name in/public/avatars/* - [BREAKING] The
running,took_oneandtook_othertranslations have been replaced byused. - [BREAKING]
rootattribute ofcl.Stephas been removed. Usecl.Messageto send root level messages. - Chain of Thought has been reworked. Only steps of type
toolwill be displayed ifhide_cotis false - The
show_readme_as_defaultconfig has been removed - No longer collapse root level messages
- The blue alert "Continuing chat" has been removed.
- The Chat Profile description should now disappear when not hovered.
- Error handling of steps has been improved
- No longer stream the first token twice
- Copilot should now work as expected even if the user is closing/reopening it
- Copilot CSS should no longer leak/be impacted by the host website CSS
- Fix various
cl.Contexterrors - Reworked message padding and spacing
- Chat profile should now support non-ASCII characters (like chinese)
- Support for video players like youtube or vimeo
- Fix audio capture on windows browsers
- Intermediary steps button placement
- User message UI has been updated
- Loading indicator has been improved and visually updated
- Icons have been updated
- Dark theme is now the default
- Scroll issues on mobile browsers
- Github button now showing
- The discord bot now shows "typing" while responding
- Discord and Slack bots should no longer fail to respond if the data layer fails
- You can know serve your Chainlit app as a Slack bot
- You can know serve your Chainlit app as a Discord bot
cl.on_audio_chunkdecorator to process incoming the user incoming audio streamcl.on_audio_enddecorator to react to the end of the user audio stream- The
cl.Audioelement now has anauto_playproperty layouttheme config, wide or defaulthttp_refereris now available incl.user_session
- The UI has been revamped, especially the navigation
- The arrow up button has been removed from the input bar, however pressing the arrow up key still opens the last inputs menu
- The user session will no longer be persisted as metadata if > 1mb
- [breaking] the
send()method oncl.Messagenow returns the message instead of the message id - [breaking] The
multi_modalfeature has been renamedspontaneous_file_uploadin the config - Element display property now defaults to
inlineinstead ofside - The SQL Alchemy data layer logging has been improved
- Fixed a bug disconnecting the user when loading the chat history
- Elements based on an URL should now have a mime type
- Stopping a task should now work better (using asyncio task.cancel)
- add support for multiline option in TextInput chat settings field - @kevinwmerritt
- disable gzip middleware to prevent a compression issue on safari
- pasting from microsoft products generates text instead of an image
- do not prevent thread history revalidation - @kevinwmerritt
- display the label instead of the value for menu item - @kevinwmerritt
- The user's browser language configuration is available in
cl.user_session.get("languages") - Allow html in text elements - @jdb78
- Allow for setting a ChatProfile default - @kevinwmerritt
- The thread history refreshes right after a new thread is created.
- The thread auto-tagging feature is now opt-in using
auto_tag_threadin the config.toml file
- Fixed incorrect step ancestor in the OpenAI instrumentation
- Enabled having a
storage_providerset toNonein SQLAlchemyDataLayer - @mohamedalani - Correctly serialize
generationin SQLAlchemyDataLayer - @mohamedalani
- Chainlit apps should function correctly even if the data layer is down
- Enable persisting threads using a Custom Data Layer (through SQLAlchemy) - @hayescode
- React-client: Expose
sessionIdinuseChatSession - Add chat profile as thread tag metadata
- Add quotes around the chainlit create-secret CLI output to avoid any issues with special characters
- Actions now trigger conversation persistence
- Messages and steps now accept tags and metadata (useful for the data layer)
- The LLama Index callback handler should now show retrieved chunks in the intermadiary steps
- Renamed the Literal environment variable to
LITERAL_API_URL(it used to beLITERAL_SERVER)
- Starting a new conversation should close the element side bar
- Resolved security issues by upgrading starlette dependency
- Added a new command
chainlit lint-translationsto check that translations file are OK - Added new sections to the translations, like signin page
- chainlit.md now supports translations based on the browser's language. Like chainlit_pt-BR.md
- A health check endpoint is now available through a HEAD http call at root
- You can now specify a custom frontend build path
- Translated will no longer flash at app load
- Llama Index callback handler has been updated
- File watcher should now properly refresh the app when the code changes
- Markdown titles should now have the correct line height
multi_modalis now under feature in the config.toml and has more granularity- Feedback no longer has a -1 value. Instead a delete_feedback method has been added to the data layer
- ThreadDict no longer has the full User object. Instead it has user_id and user_identifier fields
- OpenAI integration
- Langchain final answer streaming should work again
- Elements with public URLs should be correctly persisted by the data layer
- Enforce UTC DateTimes
- Custom js script injection
- First token and token throughput per second metrics
- The
ChatGenerationandCompletionGenerationhas been reworked to better match the OpenAI semantics
- Chainlit Copilot
- Translations
- Custom font
- Tasklist flickering
- Llama index callback handler should now correctly nest the intermediary steps
- Toggling hide_cot parameter in the UI should correctly hide the
took n stepsbuttons runningloading button should only be displayed once whenhide_cotis true and a message is being streamed
on_logouthook allowing to clear cookies when a user logs out
- Chainlit apps won't crash anymore if the data layer is not reachable
- File upload now works when switching chat profiles
- Avatar with an image no longer have a background color
- If
hide_cotis set totrue, the UI will never get the intermediary steps (but they will still be persisted) - Fixed a bug preventing to open past chats
- Scroll down button
- If
hide_cotis set totrue, arunningloader is displayed by default under the last message when a task is running.
- Avatars are now always displayed
- Chat history sidebar has been revamped
- Stop task button has been moved to the input bar
- If
hide_cotis set totrue, the UI will never get the intermediary steps (but they will still be persisted)
- Elements are now working when authenticated
- First interaction is correctly set when resuming a chat
- The copy button is hidden if
disable_feedbackistrue
- Copy button under messages
- OAuth samesite cookie policy is now configurable through the
CHAINLIT_COOKIE_SAMESITEenv var
- Relax Python version requirements
- If
hide_cotis configured totrue, steps will never be sent to the UI, but still persisted. - Message buttons are now positioned below
- cl.Step
- File upload uses HTTP instead of WS and no longer has size limitation
cl.AppUserbecomescl.UserPrompthas been split inChatGenerationandCompletionGenerationActionnow display a toaster in the UI while running
- Support for custom HTML in message content is now an opt in feature in the config
- Uvicorn
ws_per_message_deflateconfig param is now configurable likeUVICORN_WS_PER_MESSAGE_DEFLATE=false
- Latex support is no longer enabled by default and is now a feature in the config
- Fixed LCEL memory message order in the prompt playground
- Fixed a key error when using the file watcher (-w)
- Fixed several user experience issues with
on_chat_resume on_chat_endis now always called when a chat ends- Switching chat profiles correctly clears previous AskMessages
on_chat_resumenow works properly with non json serializable objectsLangchainCallbackHandlerno longer send tokens to the wrong user under high concurrency- Langchain cache should work when
cacheis totrueinconfig.toml
- Markdown links special characters are no longer encoded
- Collapsed messages no longer make the chat scroll
- Stringified Python objects are now displayed in a Python code block
- Latex support (only supporting $$ notation)
- Go back button on element page
- Code blocks should no longer flicker or display
[object object]. - Now properly displaying empty messages with inlined elements
- Fixed
Too many values to unpack errorin langchain callback - Langchain final streamed answer is now annotable with human feedback
- AzureOpenAI should now work properly in the Prompt Playground
- Code blocks display has been enhanced
- Replaced aiohttp with httpx
- Prompt Playground has been updated to work with the new openai release (v1). Including tools
- Auth0 oauth provider has a new configurable env variable
OAUTH_AUTH0_ORIGINAL_DOMAIN
cl.on_chat_resumedecorator to enable users to continue a conversation.- Support for OpenAI functions in the Prompt Playground
- Ability to add/remove messages in the Prompt Playground
- Plotly element to display interactive charts
- Langchain intermediate steps display are now much more readable
- Chat history loading latency has been enhanced
- UTF-8 characters are now correctly displayed in json code blocks
- Select widget
itemsattribute is now working properly - Chat profiles widget is no longer scrolling horizontally
- Support for Langchain Expression Language. https://docs.chainlit.io/integrations/langchain
- UI rendering optimization to guarantee high framerate
- Chainlit Cloud latency optimization
- Speech recognition to type messages. https://docs.chainlit.io/backend/config/features
- Descope OAuth provider
LangchainCallbackHandleris now displaying inputs and outputs of intermediate steps.
- AskUserMessage now work properly with data persistence
- You can now use a custom okta authorization server for authentication
ChatProfileallows to configure different agents that the user can freely chose- Multi modal support at the input bar level. Enabled by
features.multi_modalin the config cl.AskUserActionallows to block code execution until the user clicked an action.- Displaying readme when chat is empty is now configurable through
ui.show_readme_as_defaultin the config
cl.on_messageis no longer taking a string as parameter but rather acl.Message
- Chat history is now correctly displayed on mobile
- Azure AD OAuth authentication should now correctly display the user profile picture
@cl.on_file_uploadis replaced by true multi modal support at the input bar level
- Logo is displayed in the UI header (works with custom logo)
- Azure AD single tenant is now supported
collapsedattribute on theActionclass- Latency improvements when data persistence is enabled
- Chat history has been entirely reworked
- Chat messages redesign
config.ui.base_urlbecomesCHAINLIT_URLenv variable
- File watcher (-w) is now working with nested module imports
- Unsupported character during OAuth authentication
- Pydantic v2 support
- Okta auth provider
- Auth0 auth provider
- Prompt playground support for mix of template/formatted prompts
@cl.on_chat_enddecorator- Textual comments to user feedback
- Langchain errors are now correctly indented
- Langchain nested chains prompts are now correctly displayed
- Langchain error TypeError: 'NoneType' object is not a mapping.
- Actions are now displayed on mobile
- Custom logo is now working as intended
- Authentication is now unopinionated:
@cl.password_auth_callbackfor login/password auth@cl.oauth_callbackfor oAuth auth@cl.header_auth_callbackfor header auth
- Data persistence is now enabled through
CHAINLIT_API_KEYenv variable
@cl.auth_client_factory(see new authentication)@cl.db_client_factory(see new data persistence)
disable_human_feedbackparameter oncl.Message- Configurable logo
- Configurable favicon
- Custom CSS injection
- GCP Vertex AI LLM provider
- Long message collpasing feature flag
- Enable Prompt Playground feature flag
- History page filters now work properly
- History page does not show empty conversations anymore
- Langchain callback handler Message errors
@cl.on_file_uploadto enable spontaneous file uploadsLangchainGenericProviderto add any Langchain LLM in the Prompt Playgroundcl.Messagecontent now support dict (previously only supported string)- Long messages are now collapsed by default
- Deadlock in the Llama Index callback handler
- Langchain MessagesPlaceholder and FunctionMessage are now correctly supported
- Complete rework of the Prompt playground. Now supports custom LLMs, templates, variables and more
- Enhanced Langchain final answer streaming
remove_actionsmethod on theMessageclass- Button to clear message history
- Chainlit CLI performance issue
- Llama Index v0.8+ callback handler. Now supports messages prompts
- Tasklist display, persistence and
.remove() - Custom headers growing infinitely large
- Action callback can now handle multiple actions
- Langflow integration load_flow_from_json
- Video and audio elements on Safari
- Make the chat experience configurable with Chat Settings
- Authenticate users based on custom headers with the Custom Auth client
- Author rename now works with all kinds of messages
- Create message error with chainlit cloud (chenjuneking)
- Security improvements
- Haystack callback handler
- Theme customizability
- Allow multiple browser tabs to connect to one Chainlit app
- Sidebar blocking the send button on mobile
- Factories, run and post process decorators are removed.
- langchain_rename becomes author_rename and works globally
- Message.update signature changed
Migration guide available here.
- Langchain final answer streaming
- Redesign of chainlit input elements
- Possibility to add custom endpoints to the fast api server
- New File Element
- Copy button in code blocks
- Persist session between websocket reconnection
- The UI is now more mobile friendly
- Avatar element Path parameter
- Increased web socket message max size to 100 mb
- Duplicated conversations in the history tab
- Add the video element
- Fix the inline element flashing when scrolling the page, due to un-needed re-rendering
- Fix the orange flash effect on messages
- Task list element
- Audio element
- All elements can use the
.remove()method to remove themselves from the UI - Can now use cloud auth with any data persistence mode (like local)
- Microsoft auth
- Files in app dir are now properly served (typical use case is displaying an image in the readme)
- Add missing attribute
sizeto Pyplot element
- AskUserMessage.remove() now works properly
- Avatar element cannot be referenced in messages anymore
- New data persistence mode
localandcustomare available on top of the pre-existingcloudone. Learn more here.
- Performance improvements and bug fixes on run_sync and asyncify
- File watcher now reloads the app when the config is updated
- cl.cache to avoid wasting time reloading expensive resources every time the app reloads
- Bug introduced by 0.4.0 preventing to run private apps
- Long line content breaking the sidebar with Text elements
- File watcher preventing to keyboard interrupt the chainlit process
- Updated socket io to fix a security issue
- Bug preventing config settings to be the default values for the settings in the UI
- Pyplot chart element
- Config option
default_expand_messagesto enable the default expand message settings by default in the UI (breaking change)
- Scoped elements sharing names are now correctly displayed
- Clickable Element refs are now correctly displayed, even if another ref being a substring of it exists
- Moving from sync to async runtime (breaking change):
- Support async implementation (eg openai, langchain)
- Performance improvements
- Removed patching of different libraries
- Elements:
- Merged LocalImage and RemoteImage to Image (breaking change)
- New Avatar element to display avatars in messages
- AskFileMessage now supports multi file uploads (small breaking change)
- New settings interface including a new "Expand all" messages setting
- The element sidebar is resizable
- Secure origin issues when running on HTTP
- Updated the callback handler to langchain 0.0.198 latest changes
- Filewatcher issues
- Blank screen issues
- Port option in the CLI does not fail anymore because of os import
- Pdf element reloading issue
- CI is more stable
AskFileMessage's accept parameter can now can take a Dict to allow more fine grained rules. More infos here https://react-dropzone.org/#!/Accepting%20specific%20file%20types.- The PDF viewer element helps you display local or remote PDF files (documentation).
- When running the tests, the chainlit cli is installed is installed in editable mode to run faster.
- URL preview for social media share
max_http_buffer_sizeis now set to 100mb, fixing themax_size_mbparameter ofAskFileMessage
- Enhanced security
- Global element display
- Display elements with display
pagebased on their ids instead of their names
- Rework of the Message, AskUserMessage and AskFileMessage APIs:
cl.send_message(...)becomescl.Message(...).send()cl.send_ask_user(...)becomescl.AskUserMessage(...).send()cl.send_ask_file(...)becomescl.AskFileMessage(...).send()updateandremovemethods to thecl.Messageclass
- Starting to log changes in CHANGELOG.md
- Port and hostname are now configurable through the
CHAINLIT_HOSTandCHAINLIT_PORTenv variables. You can also use--hostand--portwhen runningchainlit run .... - A label attribute to Actions to facilitate localization.
- Clicks on inlined
RemoteImagenow opens the image in a NEW tab.