Warning
Do not upgrade to this release if you want to preserve your existing indexed documents but have not yet run the document index migration, which can be done from any version v3.x. See additional documentation here.
See the assets to download this version and install.
What's Changed
- feat(craft): image generation via admin-configured provider + onyx-cli by @rohoswagger in #12495
- fix(ee): scope curator group writes to curated groups by @jmelahman in #12525
- chore(web): deduplicate sharp and date-fns lock versions by @jmelahman in #12545
- fix(security): redact persona/MCP owner email + internal server_url from basic users (ENG-4251) by @justin-tahara in #12526
- feat(ods): add
ods audit imageand replace Trivy image scanning by @jmelahman in #12547 - refactor(web): remove react-select; migrate standard-answer category selectors by @jmelahman in #12543
- chore(deps): upgrade
ods: 0.9.0->0.9.2 by @jmelahman in #12552 - feat(mobile): core chat send/stream/markdown (PR3) by @Subash-Mohan in #12557
- feat(craft): connect-app setup card UI by @Danelegend in #12444
- fix(google-drive): retry connection drops during retrieval by @nmgarza5 in #12562
- fix(confluence): pass scoped_token to group sync client by @justin-tahara in #12559
- fix: disambiguate mcp tools by @evan-onyx in #12548
- fix(ci): run image-audit on amd64 to match scanned images by @jmelahman in #12563
- chore: replace remaining Danswer branding mentions with Onyx by @jmelahman in #12546
- chore(deps): upgrade
ods: 0.9.2->0.9.4 by @jmelahman in #12573 - fix(file-processing): isolate PDF extraction in a subprocess (daemon-safe) by @nmgarza5 in #12553
- fix(web): show "Indexing" not "Error" during an in-progress index attempt by @nmgarza5 in #12576
- feat(settings): collapse tab nav into a dropdown on narrow screens by @jmelahman in #12530
- fix(indexing): deliver repeated-error connector notifications to admins by @nmgarza5 in #12575
- feat(search): support time_cutoff_upper for bounded time filtering by @Danelegend in #12574
- feat(opal): responsive labeled inputs — control moves between title and description on mobile by @jmelahman in #12561
- fix(telemetry): emit broker-global queue metrics once per window by @nmgarza5 in #12565
- fix(code-interpreter): Too many files accumulating in code interpreter by @Danelegend in #12536
- fix(desktop): keep app content below the macOS native title bar after login by @justin-tahara in #12534
- fix(ci): gate cloud merge jobs on image-audit so they don't skip by @nmgarza5 in #12581
- fix(ci): gate dispatch-cloud-deployment with always() so it doesn't skip by @nmgarza5 in #12590
- feat(skills): add share permission schema by @wenxi-onyx in #12577
- feat(craft): HubSpot optional_scope for write scopes (ENG-4260) by @Danelegend in #12570
- chore(deps-dev): bump @tauri-apps/cli from 2.11.2 to 2.11.3 by @dependabot[bot] in #12600
- refactor(skills): centralize skill access policies by @wenxi-onyx in #12578
- chore(deps): bump docker/login-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #12599
- chore(deps): bump @tauri-apps/api from 2.11.0 to 2.11.1 by @dependabot[bot] in #12601
- chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 by @dependabot[bot] in #12604
- refactor(skills): centralize skill api helpers by @wenxi-onyx in #12579
- chore(deps): bump actions/checkout from 6.0.2 to 7.0.0 by @dependabot[bot] in #12609
- feat(craft): give the agent headless browser use via a built-in
browserskill by @rohoswagger in #12564 - chore(web): build frontend on a Docker Hardened Image by @jmelahman in #12592
- feat(external apps): Add granted scopes db col by @Danelegend in #12621
- chore(deps-dev): bump @tailwindcss/postcss from 4.3.0 to 4.3.1 by @dependabot[bot] in #12598
- chore(deps-dev): bump oxfmt from 0.49.0 to 0.56.0 in /web by @dependabot[bot] in #12606
- test(web): hide flaky access-tokens status in settings visual regression by @jmelahman in #12622
- chore(deps-dev): bump dotenv from 16.6.1 to 17.4.2 in /web by @dependabot[bot] in #12607
- chore(deps-dev): bump style-dictionary from 4.4.0 to 5.5.0 in /web by @dependabot[bot] in #12602
- chore: litellm bump v1.89.4 by @evan-onyx in #12620
- feat: per-user usage + cost tracking — schema + models (1/4) [modifying #11766] by @evan-onyx in #12550
- refactor(skills): centralize bundle ingestion cleanup by @wenxi-onyx in #12626
- fix: scope cross-tenant permission caches per tenant/instance by @nmgarza5 in #12580
- feat(tracing): DB-backed tracing provider config with live env fallback (PR 1/3) by @justin-tahara in #12529
- feat(skills): add skill access helpers by @wenxi-onyx in #12625
- fix: tenant-scope and invalidate the token-rate-limit existence cache by @nmgarza5 in #12623
- refactor(skills): simplify db mutation helpers by @wenxi-onyx in #12624
- chore(fmt): apply oxfmt after upgrade by @jmelahman in #12628
- feat(tracing): admin API for tracing providers (PR 2/3, stacked on #12529) by @justin-tahara in #12535
- refactor(users): consolidate user / auth modules into
/lib/usersand/lib/authby @raunakab in #12632 - feat(tracing): admin UI for tracing providers (PR 3/3, stacked on #12535) by @justin-tahara in #12539
- chore(deps-dev): bump requests-oauthlib from 1.3.1 to 2.0.0 by @dependabot[bot] in #12608
- docs: remove stale skills planning docs by @wenxi-onyx in #12638
- ci(skills): trigger craft k8s tests for skill api changes by @wenxi-onyx in #12642
- refactor(agents): extract share modal utilities by @wenxi-onyx in #12641
- refactor(skills): add bundle rewrite utilities by @wenxi-onyx in #12640
- feat(craft): context-window usage ring + compaction marker by @rohoswagger in #12613
- fix(chat): base chat retention on last message time by @justin-tahara in #12639
- fix(google): persist PKCE code verifier for uploaded-app OAuth flow by @nmgarza5 in #12644
- feat(mobile): resume in-flight chat runs + auto-name new sessions by @Subash-Mohan in #12585
- feat(mobile): add settings layout primitives + tab nav by @Subash-Mohan in #12587
- feat(craft): grant Slack external app files:write to upload files by @Danelegend in #12643
- ci(pre-commit): run ruff in isolated overlay instead of syncing project by @jmelahman in #12657
- feat(external apps): Apply granted scopes to external apps by @Danelegend in #12629
- refactor(skills): consolidate bundle entry validation by @wenxi-onyx in #12654
- refactor(skills): extract InstructionsDisplayModeToggle by @wenxi-onyx in #12655
- feat(craft): default ENABLE_BROWSER on to match the sandbox image by @rohoswagger in #12659
- chore(skills): remove legacy admin skills UI by @wenxi-onyx in #12656
- feat(skills): unify skill API on access policies by @wenxi-onyx in #12662
- fix(craft): clean up scheduled task run summary display by @rohoswagger in #12635
- feat(skills): add share, transfer, and edit endpoints by @wenxi-onyx in #12663
- feat(skills): add management editor and sharing UI by @wenxi-onyx in #12664
- feat(config): CI drift gate for undocumented env vars by @justin-tahara in #12652
- fix(jira): skip deleted groups during group sync by @Weves in #12669
- feat(mobile): agent selection — gallery, sidebar rail, avatars by @Subash-Mohan in #12647
- feat(mobile): projects — list, select, chat-within by @Subash-Mohan in #12648
- feat(reindex): reindex-port flow — copy & re-embed live chunks into the new index by @Subash-Mohan in #11977
- chore: agents md vespa by @evan-onyx in #12690
- refactor(mobile): unify chat + project into one persistent ChatSurface by @Subash-Mohan in #12687
- chore(craft): backfill Notion built-in external app by @wenxi-onyx in #12689
- chore(dev): add sentry MCP entry by @jmelahman in #12702
- chore(dev): upgrade devcontainer image and automate future upgrade PRs by @jmelahman in #12704
- feat(craft): Add Notion as a built-in external app by @Danelegend in #12660
- chore(dev): automate onyx-devtools version upgrade PRs by @jmelahman in #12705
- fix(helm): v4.3 chart deploy blockers — sandbox-proxy IPv6 netpol fail-closed + duplicate server_tokens nginx crash-loop by @justin-tahara in #12706
- feat(ods): add
audit ignoreTUI for the advisory allowlist by @jmelahman in #12707 - feat(ods): add
ods audit --actionsto scan pinned GitHub Actions by @jmelahman in #12618 - fix(helm): support external CNPG operators via postgresqlOperator.enabled by @justin-tahara in #12667
- feat(chat): per-chat export as text and markdown in project menu by @jmelahman in #12701
- fix(craft): stop idle-sandbox reaper from killing actively-used pods by @rohoswagger in #12714
- fix(opal): render LineItemButton as div to fix nested-button hydration error by @jmelahman in #12712
- test(e2e): de-race scroll-bottom assertions in scroll_behavior spec by @rohoswagger in #12715
- fix(sandbox): pin chromium to 149 — trixie-security 150 SIGTRAPs at launch, breaking craft browser CI by @rohoswagger in #12717
- fix(desktop): grant webview ACL permissions for shell-open and titlebar drag by @jmelahman in #12719
- feat(web): always log toast messages to the console by @jmelahman in #12718
- fix(voice): gate silent audio out of chunked STT to stop hallucinated transcripts by @justin-tahara in #12713
- fix(craft): require hover dwell before swapping open plus-menu flyout by @wenxi-onyx in #12711
- chore(dev): upgrade onyx-devtools to 0.9.5 by @onyx-cherry-pick[bot] in #12728
- feat(mobile): project file management — upload, indexing, link/unlink by @Subash-Mohan in #12691
- fix(llm): omit sampling params and use adaptive thinking for claude-sonnet-5 by @justin-tahara in #12735
- feat(indexing): add GA gemini-embedding-2 to cloud embedding options by @justin-tahara in #12736
- feat(settings): convert Custom Retention to an inline days input by @jmelahman in #12693
- fix(admin): grow form-input rows to the Figma input-column width by @jmelahman in #12703
- feat(craft): detect sandbox sleep and wake on user intent by @rohoswagger in #12661
- feat: store Google service-account key on the credential row by @nmgarza5 in #12646
- fix(auth): restore chat access for LIMITED service-account keys by @wenxi-onyx in #12738
- refactor(llm): gate Anthropic thinking/sampling on parsed model version by @jmelahman in #12744
- feat(ods): dual-format audit output + runbook + non-interactive ignore add by @jmelahman in #12747
- chore(dev): upgrade onyx-devtools to 0.9.6 by @onyx-cherry-pick[bot] in #12750
- feat: store the Google OAuth app credential on the credential by @nmgarza5 in #12666
- feat: knowledge pane search frontend by @evan-onyx in #12741
- fix(craft): serialize sandbox provisioning with per-sandbox redis lock by @wenxi-onyx in #12753
- refactor(model-server): gate DISABLE_MODEL_SERVER in python entrypoint by @jmelahman in #12754
- fix(craft): heal stale opencode password on event-stream attach without a failed cycle by @wenxi-onyx in #12756
- refactor: agent knowledge pane by @evan-onyx in #12752
- fix(cli): JSON-aware truncation so search output is always valid JSON by @wenxi-onyx in #12768
- feat: add sso_provider table and per-type config store (OIDC + SAML) by @nmgarza5 in #12731
- feat: hardened OIDC client requiring verified emails and issuer-owned discovery by @nmgarza5 in #12732
- fix(model-server): merge custom CA roots in the entrypoint for distroless by @jmelahman in #12761
- feat: allow multiple Google Drive and Gmail connectors by @nmgarza5 in #12668
- fix(files): render xlsx chat attachments via backend-parsed spreadsheet preview by @justin-tahara in #12764
- chore: bump sandbox onyx-cli to 1.2.2 by @wenxi-onyx in #12784
- fix(prompts): stress stateless sandbox + batching in python tool guidance by @justin-tahara in #12763
- feat(admin): admin-managed Craft access (workspace default + per-user toggles) by @wenxi-onyx in #12769
- chore(deps): bump react-resizable-panels from 4.4.1 to 4.11.2 in /backend/onyx/server/features/build/sandbox/image/templates/outputs/web by @dependabot[bot] in #12603
- chore(deps-dev): bump @types/react from 19.2.10 to 19.2.17 in /backend/onyx/server/features/build/sandbox/image/templates/outputs/web by @dependabot[bot] in #12605
- fix(cli): preserve symbols for govulncheck by @wenxi-onyx in #12787
- feat(auth): SAML providers driven by sso_provider rows by @nmgarza5 in #12758
- chore(deps-dev): bump @tailwindcss/postcss from 4.3.0 to 4.3.1 in /backend/onyx/server/features/build/sandbox/image/templates/outputs/web by @dependabot[bot] in #12318
- refactor(auth/banners): clean up session management, fix EE logout bug, introduce authenticated route group by @raunakab in #12760
- feat: encrypted key-value table for instance secrets, drop the encrypt flag by @nmgarza5 in #12672
- fix(craft): hydrate managed content before sandbox reports RUNNING by @wenxi-onyx in #12789
- refactor(craft): move sandbox sleep transition into lifecycle by @wenxi-onyx in #12790
- fix(chat): render full multi-model comparison in shared chats by @nmgarza5 in #12792
- feat: Improve code-int error display by @Danelegend in #8916
- fix: scope Drive domain shares to a domain group instead of instance-public by @nmgarza5 in #12730
- fix: resolve license notification EE import by @wenxi-onyx in #12796
- feat: canvas perm sync by @evan-onyx in #12729
- fix(craft): allow proxied origin for webapp dev server + fix preview 404 flapping by @wenxi-onyx in #12793
- feat: canvas perm sync cleanup by @evan-onyx in #12798
- fix(craft): let HMR drive preview updates instead of per-edit iframe remounts by @wenxi-onyx in #12799
- refactor(craft): centralize sandbox status writes in lifecycle by @wenxi-onyx in #12791
- feat(mobile): per-message file attachments in the chat composer by @Subash-Mohan in #12804
- chore(model-server): build on a Docker Hardened Image (full distroless) by @jmelahman in #12636
- fix(web): textarea resize utilities overridden by unlayered global CSS by @wenxi-onyx in #12811
- chore(deps): bump actions/cache from 5.0.5 to 6.1.0 by @dependabot[bot] in #12774
- chore(deps-dev): bump @tailwindcss/postcss from 4.3.1 to 4.3.2 by @dependabot[bot] in #12775
- chore(deps): bump next from 16.2.6 to 16.2.9 by @dependabot[bot] in #12777
- chore(deps): bump marked from 18.0.4 to 18.0.5 by @dependabot[bot] in #12779
- chore(deps): bump soupsieve from 2.8 to 2.8.4 by @dependabot[bot] in #12809
- chore(deps): bump @radix-ui/react-separator from 1.1.10 to 1.1.11 in /web by @dependabot[bot] in #12776
- chore(deps-dev): bump pytest-asyncio from 1.3.0 to 1.4.0 by @dependabot[bot] in #12780
- chore(deps): bump cohere from 5.6.1 to 7.0.5 by @dependabot[bot] in #12783
- chore(deps-dev): bump atlassian-python-api from 3.41.16 to 4.0.7 by @dependabot[bot] in #12782
- fix(web): stop firing authenticated app-shell fetches on /auth/* pages by @jmelahman in #12745
- fix(agents): clear rejected file from agent editor upload state by @justin-tahara in #12812
- feat(opal): auth layouts, InlineMarkdown lists, inputs topRight, Content success color by @raunakab in #12810
- fix(auth): stop /me from 500ing for service-account API key users by @nmgarza5 in #12815
- chore(deps): bump aws-actions/aws-secretsmanager-get-secrets from 2.0.10 to 3.0.1 by @dependabot[bot] in #12772
- feat(opensearch): Add created_at field to Documents by @Danelegend in #12755
- feat(auth): parametric multi-provider OIDC/Google login from sso_provider rows by @nmgarza5 in #12797
- chore(deps): bump next from 16.2.6 to 16.2.10 in /web by @dependabot[bot] in #12778
- chore(deps): bump katex from 0.16.47 to 0.17.0 in /web by @dependabot[bot] in #12781
- chore(deps): bump docker/login-action from 4.1.0 to 4.3.0 by @dependabot[bot] in #12773
- docs(agents): recommend playwright bootstrap admin credentials in AGENTS.md by @jmelahman in #12822
- feat(craft): inline provider onboarding on the welcome page by @wenxi-onyx in #12816
- fix(web): key model-selector selection by model configuration id by @jmelahman in #12823
- feat(opal): add editable type to Tag by @nmgarza5 in #12826
- refactor(logo): consolidate logo rendering into
useAppLogohook by @raunakab in #12820 - feat(opal): add InputTags by @nmgarza5 in #12833
- test(auth): live multi-provider OIDC login against mock-oauth2-server by @nmgarza5 in #12824
- feat(auth): multi-provider SSO login page + login-options endpoint by @nmgarza5 in #12830
- chore(deps-dev): bump mistune from 3.2.1 to 3.3.0 by @dependabot[bot] in #12837
- feat(indexing): Populate created_at for documents by @Danelegend in #12757
- feat(connectors): Connectors populate created_at Document field by @Danelegend in #12759
- fix(craft): renewable prompt-slot lease so dead runners can't strand sessions by @rohoswagger in #12819
- feat(anthropic): add Fable 5 and Sonnet 5 to recommended models by @jmelahman in #12841
- fix(ci): add dhi.io login to shared model-server build action + consolidate PR builds by @jmelahman in #12852
- refactor(sidebar): move StepSidebar nav tab into SidebarHeader children by @raunakab in #12854
- fix(llm): keep GPT- brand prefix in generated model display names by @jmelahman in #12855
- ci(llm): run provider chat tests on recommended-models.json changes by @jmelahman in #12858
- refactor(ee): share credential_json helper across perm-sync connectors by @wenxi-onyx in #12859
- refactor: clean up auth-related types+utils+functions+hooks into
lib/auth/directory by @raunakab in #12853 - feat(llm): update OpenRouter and OpenAI recommended models by @jmelahman in #12865
- feat(auth): admin CRUD API for multi-provider SSO providers by @nmgarza5 in #12842
- feat(onyx-wiki): config-driven document push for non-EE deployments by @Bo-Onyx in #12860
- Fix MCP OAuth public PKCE registration by @jack-watroba in #12875
- feat(auth): SSO providers admin UI (Google, OIDC, SAML) by @nmgarza5 in #12868
- fix(llm): downgrade required tool_choice to auto for Qwen thinking models by @jmelahman in #12867
- fix(web): fix loading overlay css by @wenxi-onyx in #12882
- fix: public root nodes by @evan-onyx in #12880
- fix(web): restore standard height for connector wizard text inputs by @jmelahman in #12884
- feat(auth): gate multiple enabled SSO providers at Business tier by @nmgarza5 in #12878
- fix(web): render optional credential edit fields by @wenxi-onyx in #12883
- fix(backend): rollback connector creation on validation failure by @wenxi-onyx in #12888
- fix(open_url): resolve type-ambiguous Google Drive links to indexed docs by @Danelegend in #12892
- refactor(auth-lib): consolidate auth library layer by @raunakab in #12870
- fix(craft): scheduled task runs no longer truncated by the 15-min turn timeout by @rohoswagger in #12856
- refactor(ods): standardize deploy-target resolution across deploy subcommands by @jmelahman in #11702
- refactor(auth-components): Move auth UI components to lib by @raunakab in #12885
- feat(search): Toggles for source/time filter by @Danelegend in #12897
- fix(craft): hide nextjs.log and nextjs.pid in file explorer by @rohoswagger in #12926
- feat(craft): replace onboarding intro with the Living Map tour by @wenxi-onyx in #12828
- ci(helm): require Chart.yaml version bump when chart files change by @jmelahman in #12771
- fix(slack): enforce bot agent access before answering by @wenxi-onyx in #12894
- ci(dependabot): add Docker update entries for web and backend images by @jmelahman in #12932
- fix(auth): only enforce password constraints during signup, not login by @raunakab in #12933
- chore(deps-dev): bump @tauri-apps/cli from 2.11.3 to 2.11.4 by @dependabot[bot] in #12946
- chore(deps-dev): bump @typescript/native-preview from 7.0.0-dev.20260616.1 to 7.0.0-dev.20260706.1 by @dependabot[bot] in #12935
- chore(deps): bump docker/bake-action from 7.2.0 to 7.3.0 by @dependabot[bot] in #12939
- chore(deps): bump dompurify from 3.4.8 to 3.4.11 by @dependabot[bot] in #12940
- chore(deps): bump @radix-ui/react-hover-card from 1.1.17 to 1.1.18 in /web by @dependabot[bot] in #12943
- chore(dev): upgrade onyx-devtools to 0.10.0 by @onyx-cherry-pick[bot] in #12934
- chore(deps): bump dorny/paths-filter from 4.0.1 to 4.0.2 by @dependabot[bot] in #12948
- chore(deps): bump runs-on/action from 2.1.2 to 2.2.0 by @dependabot[bot] in #12947
- chore(deps): bump recharts from 2.15.4 to 3.9.2 in /web by @dependabot[bot] in #12942
- fix(web): render Nebius provider logo on its lime brand tile by @justin-tahara in #12951
- fix(ttl): isolate + batch chat retention cleanup off the primary queue by @justin-tahara in #12928
- ci(craft-k8s): scope the helm trigger to sandbox/craft chart paths by @justin-tahara in #12957
- chore(deps-dev): bump pywikibot from 9.0.0 to 11.4.2 by @dependabot[bot] in #12945
- feat(web): group LLM providers into labeled sections by @justin-tahara in #12953
- feat(opal): add TagList by @nmgarza5 in #12839
- chore(greptile): expand excludeAuthors and populate includeAuthors by @jmelahman in #12963
- feat(indexing): resume indexing on graceful worker shutdown instead of failing by @nmgarza5 in #12954
- chore(deps): loosen mitmproxy's msgpack cap for dependabot by @jmelahman in #12950
- feat(craft): admin Craft section with editable workspace instructions by @rohoswagger in #12960
- fix(celery): model-server request timeouts + wire the orphaned hierarchy queue by @justin-tahara in #12964
- fix(scim): return 409 not 500 on concurrent duplicate user create by @justin-tahara in #12966
- refactor(craft): use shared modal for sandbox sleep notice by @wenxi-onyx in #12967
- fix(auth): raise
OnyxErrorwhen email is unconfigured in auth hooks by @raunakab in #12968 - feat(opal): add logout variant and onClick to AuthLayouts.Submit by @raunakab in #12977
- feat(llms): automate recommended-models.json updates from OpenRouter catalog by @jmelahman in #12864
- fix(llm): Use read-write lock when sending calls by @Danelegend in #12979
- chore(build): drop the setuptools build system; make onyx a virtual uv project by @jmelahman in #12952
- refactor(mobile): unify file handling into one file-keyed store by @Subash-Mohan in #12916
- fix(craft): refresh prompt timeout on activity by @wenxi-onyx in #12983
- fix(craft): update image-generation skill description by @rohoswagger in #12978
- feat: open url tool lite mode by @evan-onyx in #12980
- fix: canvas tests by @evan-onyx in #12991
- build(web): swap ts-jest for @swc/jest and adopt stable TypeScript 7 checker by @jmelahman in #12961
- chore(sidebar): move sidebar-logo-rendering function to
lib/sidebar/by @raunakab in #12998 - fix(craft): refresh files without clearing tree by @wenxi-onyx in #12990
- refactor(sidebar): pass explicit false instead of undefined for non-foldable logo by @raunakab in #13000
- fix(enterprise-settings): stop custom-analytics-script 500 on tenant-less MT requests by @justin-tahara in #13003
- feat(skills): support folder bundle uploads by @wenxi-onyx in #13001
- fix(helm): increase sandbox proxy memory allocation by @wenxi-onyx in #13008
- fix(sandbox): avoid LLM provider memory tax in proxy by @wenxi-onyx in #13007
- feat(auth): IdP directory-profile enrichment (modified mirror of #12905) by @nmgarza5 in #12997
- fix(web): scope PostHog identity cookie to exact host by @jmelahman in #13011
- feat(connectors): add LumApps connector (modified mirror of #12899) by @Bo-Onyx in #12999
- feat(search): Search pipeline uses created and updated at time ranges by @Danelegend in #12893
- feat(mobile): chat message/streaming polish, agent timeline, file management by @Subash-Mohan in #12987
- fix(background): batch orphan-tag cleanup to bounded server-side deletes by @justin-tahara in #13006
- feat(opal): add IconContainer by @nmgarza5 in #12843
- feat(opal): make LinkButton external glyph optional by @nmgarza5 in #12913
- feat(opal): add Calendar by @nmgarza5 in #12886
- refactor(llm): split LiteLLM model-map lookups out of llm/utils by @jmelahman in #12974
- feat(skills): create and manage skills in UI by @wenxi-onyx in #13014
- chore(deps): upgrade ruff: 0.12.0->0.15.21 by @jmelahman in #12929
- feat(desktop): add Windows ARM64 desktop builds by @jmelahman in #13032
- ci: skip Linear check for Dependabot PRs by @wenxi-onyx in #13049
- chore(deps-dev): bump oxlint from 1.69.0 to 1.72.0 in /backend/onyx/server/features/build/sandbox/image/templates/outputs/web by @dependabot[bot] in #12938
- chore(deps-dev): bump @types/node from 24.12.2 to 26.1.0 in /backend/onyx/server/features/build/sandbox/image/templates/outputs/web by @dependabot[bot] in #12941
- chore(deps): bump @base-ui/react from 1.1.0 to 1.6.0 in /backend/onyx/server/features/build/sandbox/image/templates/outputs/web by @dependabot[bot] in #12944
- feat(banner): admin system announcement via notification synthesis by @nmgarza5 in #12369
- feat(craft): add SessionOrigin.SLACK for headless Slack sessions by @rohoswagger in #13050
- chore(docs): fix
cnreference to legacy/lib/utilsby @jmelahman in #13002 - refactor(llm): drop hardcoded infer_vision_support, use LiteLLM cost map by @jmelahman in #13052
- feat(banner): admin System Announcement section in Appearance & Theming by @nmgarza5 in #12851
- feat(banner): consolidate banners into a bottom-left queue by @nmgarza5 in #12869
- refactor(llm): move DYNAMIC_LLM_PROVIDERS to llm/constants by @jmelahman in #13056
- feat(opal): add Toast by @nmgarza5 in #12919
- chore(tools): add
duo-onyxto greptileincludeAuthorsby @jmelahman in #13062 - feat: canvas connector frontend by @evan-onyx in #13030
- fix(llm): resolve reasoning support from LiteLLM cost map for dynamic providers by @jmelahman in #13051
- chore: web server type gen by @evan-onyx in #13066
- feat(pptx-skill): deterministic layout linter as QA step 0 by @rohoswagger in #13060
- feat(search): Time based filtering by @Danelegend in #12540
- feat(image-gen): support Vertex AI Workload Identity auth by @justin-tahara in #13005
- feat(mcp): group/public access control for MCP servers [Mirror of #12227 for EE edits] by @evan-onyx in #12972
- fix: github empty repos should not cause exception by @yuhongsun96 in #13065
- chore: confluence test drift by @evan-onyx in #13077
- refactor: unify datetime to utc by @evan-onyx in #13084
- feat(mobile): web-parity auto-scroll control for streaming chat by @Subash-Mohan in #13022
- refactor(mcp): Extract resolving mcp credentials by @Danelegend in #13076
- feat(mobile): chat citations + cited sources by @Subash-Mohan in #13025
- fix(prompts): apply placeholders consistently across all agent prompts (mirror of #13028) by @Bo-Onyx in #13072
- fix(craft): allow longer sandbox cold starts by @wenxi-onyx in #13094
- feat(opal): add PasswordInputTypeIn by @nmgarza5 in #12923
- feat(opal): add InputDatePicker by @nmgarza5 in #12914
- refactor(auth): gate cloud-only behavior on MULTI_TENANT by @nmgarza5 in #13017
- fix(web): flush chat scrollbar with the viewport edge by @jmelahman in #13095
- feat(auth): key the invite-list bypass on per-user SSO provenance by @nmgarza5 in #13018
- fix(web): don't show a bare em dash in document title while chat name is pending by @jmelahman in #13098
- feat(auth): remove legacy single-provider SSO modes by @nmgarza5 in #13027
- feat(opal): add InputTextArea by @nmgarza5 in #12838
- feat(skills): enforce canonical skill names by @wenxi-onyx in #13078
- feat(auth): remove AUTH_TYPE and the AuthType enum, serve multi_tenant by @nmgarza5 in #13029
- feat(search): Surface time filter on FE by @Danelegend in #12617
- feat(auth): Classify Redis session token rejection; Redis entries now outlive logical TTL for visibility by @acaprau in #13015
- feat(pptx-skill): composable slide component library by @rohoswagger in #13079
- ci(deployment): drop -cloud image repos, standardize to single repos by @jmelahman in #13097
- chore(llms): update recommended models by @onyx-cherry-pick[bot] in #13107
- fix(opal): keep password text size constant when masked by @nmgarza5 in #13105
- fix(web): run page auth checks in a server layout instead of client render by @jmelahman in #13108
- fix: sharepoint group permissions by @evan-onyx in #13109
- feat(opal): add arrow-wall-left, zap, and list-tree icons by @nmgarza5 in #13110
- fix(ci): stamp the opal release version without touching the install tree by @nmgarza5 in #13102
- feat(opal): add InputSelect by @nmgarza5 in #12881
- feat(opal): add InputTime by @nmgarza5 in #12915
- fix(auth): keep legacy SSO redirect URIs working after row migration by @nmgarza5 in #13111
- fix(mcp): proactively refresh OAuth tokens for SSE transport [mirror of #12903 for edits] by @evan-onyx in #13085
- feat(pptx-skill): reliability fixes — deck-first build order, context discipline, pack-early by @rohoswagger in #13104
- fix(craft): stop killing slow tool turns + gracefully recover from step timeouts by @rohoswagger in #13096
- feat(pptx-skill): deck-styled charts and zero-setup icons by @rohoswagger in #13101
- chore: add python-docx to Craft sandbox default Python packages by @claude[bot] in #13117
- feat(pptx-lint): density profiles — dense mode relaxes margin warning to 0.25" by @rohoswagger in #13103
- feat(skills): add per-user skill enablement by @wenxi-onyx in #13118
- refactor(mcp): consolidate shared MCP under features/mcp by @Danelegend in #13122
- docs(desktop): correct config.json paths and align "Server URL" label by @jmelahman in #13112
- feat(opal): add TextButton component by @raunakab in #13132
- fix: persist dark mode toggle across reloads by @rohoswagger in #12445
- test(search): connector-filter scope-decision eval suite by @Danelegend in #12331
- feat(auth): Extend browser cookie max age by SESSION_TOKEN_GRACE_PERIOD_SECONDS by @acaprau in #13121
- docs(auth): Update docstring for
_maybe_refresh_oauth_tokensby @acaprau in #13124 - fix(chat): use text-04 for message body text by @duo-onyx in #13120
- feat(auth, fe): Update logout modal copy with more detail from the backend by @acaprau in #13123
New Contributors
- @jack-watroba made their first contribution in #12875
- @claude[bot] made their first contribution in #13117
- @duo-onyx made their first contribution in #13120
Full Changelog: v4.3.0...v4.4.0-beta.1