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
New Contributors
- @jack-watroba made their first contribution in #12875
Full Changelog: v4.3.0...v4.4.0-beta.0