main
eslint: Fix unicorn/prefer-url-href.
bootstrap: Remove bootstrap-btn file and refs.
dependencies: Upgrade JavaScript dependencies.
eslint: Fix no-useless-assignment.
web: Use named import for jQuery.
gifs: Introduce KLIPY as a GIF provider.
eslint: Fix unicorn/no-useless-else.
eslint: Fix unicorn/prefer-else-if.
eslint: Fix @typescript-eslint/require-array-sort-compare.
assets: Declare *.css for TypeScript.
attachments: Replace 'messages' field with 'message_ids'.
eslint: Fix unicorn/prefer-direct-iteration.
buddy_list: Introduce background_task for non awaited code.
compose_ui: Don't let edit boxes overwrite compose_textarea_typeahead.
eslint: Fix unicorn/prefer-iterator-to-array.
bot_type_values: Normalize int/string naming and migrate e2e test.
bots: Remove duplicate fields from bot objects in realm_bots.
tests: Remove rewires in browser_history.test.cjs.
ui_init: Show unsupported browser warning on load.
eslint: Fix unicorn/prefer-set-methods.
compose: Add Ctrl+]/[ shortcuts for list indent/unindent
eslint: Fix unicorn/no-unsafe-string-replacement.
eslint: Fix unicorn/no-unnecessary-array-flat-map.
topic_link_util: Refactor to return unescaped links.
eslint: Fix unicorn/consistent-existence-index-check.
eslint: Fix unicorn/no-subtraction-comparison.
compose_call: Introduce ComposeCallSession.
compose_closed_ui: Restore label_text for stream/topic recipients.
compose paste: Convert mention HTML to markdown when quoting.
eslint: Fix unicorn/prefer-location-assign.
eslint: Fix unicorn/no-incorrect-template-string-interpolation.
compose: Clarify warning when linking to a private channel.
modals: Remove unused unescaped vars for modal submit/exit button text.
buddy_data: Check conversation_participants against legacy data.
message_header: Avoid hiding icons on smaller widths.
date: Add date_util.ts.
debug: Remove print_elapsed_time in favor of console.time.
dialog: Mark single-line modals as compact.
echo: Clear failed local echoes from echo_state on abort.
desktop_integration: Convert module to TypeScript.
email-pill: Add generate_pill_html for email pills.
web: Switch to the new individual_emoji_changes capability.
portico: Fix built-in emoji rendering in organization descriptions.
eslint: Switch from eslint-plugin-import to eslint-plugin-import-x.
web: Use wildcard import for katex.
web: Add explicit extensions to imports.
filter: Move canonicalize_operator to new util file.
recent_view: Supress focus outline till first user keypress.
web: Tighten typing of custom iterators.
widgets: Separate out widget initialization and ui render.
gifs: Generate network objects based on realm state.
jquery-idle: Remove.
eslint: Fix unicorn/no-negated-array-predicate.
user_pill: Use user_id to get user info instead of email.
eslint: Fix unicorn/prefer-split-limit.
invite: Convert module to TypeScript.
eslint: Fix unicorn/no-computed-property-existence-check.
i18n: Improve displayed names for a few languages.
eslint: Fix unicorn/prefer-hoisting-branch-code.
integration-url-modal: Use input pills for branch names.
stream_pill: Remove unused show_subscriber_count field.
components: Open tab when pressing "Enter" on a focussed tab.
klipy: Fix locale format to match Klipy API expectations.
markdown: Use RE2JS for linkifier rendering.
loading_error: Extract the loading-error UI toggle to a shared module.
eslint: Fix unicorn/prefer-number-is-safe-integer.
web: Switch to Zod mini API.
hash_util: Set channel URL based on user setting.
message_actions: Show "Expand message" for condensed messages.
eslint: Fix unicorn/no-unreadable-for-of-expression.
eslint: Fix unicorn/prefer-array-from-map.
eslint: Fix unicorn/logical-assignment-operators.
message_fetch_raw_content: Use single-message endpoint for raw content.
pm_conversations: Remove empty DM conversations from the sidebar.
eslint: Fix unicorn/prefer-simplified-conditions.
messsage-list-data: Add comment do all_messages_after_mute_filtering.
eslint: Fix no-unassigned-vars.
message_live_update: Live-update DM recipient bar on user rename.
eslint: Fix unicorn/prefer-smaller-scope.
narrow: Simplify actively_scrolling data flow.
web-src: Update comments with "private message" or "PM".
message_util: Add a helper to fetch a narrow's last message id.
muted_users: Re-render typing notifications on mute state change.
narrow_banner: Add search shared history button to empty narrows.
narrow_history: Remove invalid assertion.
filter: Use user_id instead email for user type operators.
navigate: Bound arrow-key motion across long messages.
ts: Move PMListConversation to pm_list_data.
eslint: Fix unicorn/prefer-scoped-selector.
pygments_data: Remove undefined option for lang value.
inbox_ui: Make it possible to disable channel folders.
all_messages_data: Rename to recent_view_messages_data.
stream_events_dispatch: Rerender inbox/recent views on channel updates.
web: Fix usage of z.undefined(), z.unknown().
reload: Convert module to TypeScript.
eslint: Fix unicorn/prefer-type-literal-last.
resolved_topic: Fix comment on RESOLVED_TOPIC_PREFIX_RE.
retry_backoff: Add slower_backoff for 5 retries spanning ~3 minutes.
eslint: Fix unicorn/no-unnecessary-string-trim.
web: Move web app to ‘web’ directory.
codespell: Fix typos caught by codespell.
page_params: Suppress Sentry on parse failures that schedule a reload.
ui_init: Pass fetch_event_types to skip unused stream data on reload.
people: Demote "Added user late" log during initial events catchup.
message: Remove unused sender_realm_str.
settings: Fix list of group settings that admins cannot update.
settings: Duplicate bots panel in "Personal" tab.
eslint: Fix unicorn/operator-assignment.
sidebars: Sync Tab and arrow key navigation in sidebars.
search: Add support for date operator.
stream_color: Handle missing stream in privacy icon update.
settings: Add clear button to subscriber/member filters.
stream: Allow non-admins to create channel without subscribing to it.
stream_muting: Fix stream msgs not displayed when stream in unmuted.
stream_pill: Use Set for taken-stream membership in typeahead.
refactor: Extract folder filter dropdown widget.
streams: Add UI for per-stream push notification default.
submessage: Rerender message on live poll edit events.
channel: Add option to notify users newly added to a channel.
bootstrap_typeahead: Change matcher to accept query & return a function.
topic-list-data: Extract helper for building all topics list info.
transmit: Send user_ids instead of emails for DM replies.
eslint: Fix unicorn/require-array-sort-compare.
eslint: Fix unicorn/no-useless-promise-resolve-reject.
eslint: Fix unicorn/no-useless-collection-argument.
user_groups: Allow adding a user to groups via user profile.
groups-ui: Add option to copy membership from group.
user_pill: Add create_pill_data helper.
settings: Rename web_home_view value from "recent_topics" to "recent".
watchdog: Use Page Lifecycle API for unsuspend.
poll: Add ZulipWidgetContext class.
widgets: Move Event to widget_data.ts.
widgets: Store widget_data in GenericWidget class object.
widgets: Split out generic_widget code.
zform (trivia bot): Extract zform_data.
puppeteer: Add tests for /near/ narrow marking messages read.