Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. Every release is signed with the same key introduced in commit 0112e53.
Verify using the pinned commit hash (recommended):
A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.95.0-rc.3Verify using the release tag (convenience):
Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.95.0-rc.3/cosign.pub \
ghcr.io/berriai/litellm:v1.95.0-rc.3Expected output:
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
What's Changed
- chore(ci): promote internal staging to main by @mateo-berri in #32884
- chore(ci): promote internal staging to main by @yuneng-berri in #33308
- chore(ci): promote internal staging to main by @yuneng-berri in #33425
- chore(ci): promote internal staging to main by @yuneng-berri in #33491
- chore(ci): promote internal staging to main by @yuneng-berri in #33640
- chore(ci): promote internal staging to main by @yuneng-berri in #33868
- chore(ci): promote internal staging to main by @yuneng-berri in #34200
- chore(ci): promote internal staging to main by @yuneng-berri in #34450
- chore(ci): promote internal staging to main by @yuneng-berri in #34519
- fix(azure_ai): advertise 1M context window for Claude Opus 4.6+ on Foundry by @devin-ai-integration[bot] in #34556
- feat(mcp): send RFC 8707 resource indicators on upstream OAuth legs by @tin-berri in #34265
- fix(guardrails): resolve judge_model credentials via lazy Router lookup in llm_as_a_judge by @devin-ai-integration[bot] in #34509
- style(ui): match MCP Servers tabs to the dashboard's line tab pattern by @yuneng-berri in #34685
- fix(ui): center vertical toolbar dividers by @yuneng-berri in #34684
- fix(ui): restore the Add MCP Server dialog size and header spacing by @yuneng-berri in #34679
- fix(ui): truncate long team names in the models table team dropdown by @yuneng-berri in #34689
- fix(e2e/ui): resolve dashboard base URL from env instead of hardcoding localhost by @mubashir1osmani in #34739
- chore(deps): bump gitpython to 3.1.55 and brace-expansion to 5.0.8 by @yuneng-berri in #34798
- fix(guardrails): preserve cache_control breakpoints in compresr write-back by @tin-berri in #34660
- fix(install): pass an explicit Python version request to uv tool install by @tin-berri in #34750
- refactor(management): move the logs end-user filter onto /management/v1 by @yuneng-berri in #34691
- fix: match exact class in callback dedup so a custom subclass does not block a built-in logger by @yucheng-berri in #34804
- fix(prometheus): populate cache write token metrics for OpenAI-style usage by @yucheng-berri in #34803
- chore(typing): clear 2.7k basedpyright Any errors across 15 hotspot files by @mateo-berri in #34745
- test(e2e): stop racing control-plane writes across the mcp, a2a, guardrail and passthrough suites by @mubashir1osmani in #34833
- fix(ui): validate default team values in Default User Settings by @ryan-crabbe-berri in #34815
- fix(proxy): sanitize per-key callback config out of logged metadata by @yuneng-berri in #32583
- fix(proxy): roll up tool spend daily instead of scanning SpendLogs by @tin-berri in #34675
- fix(responses_bridge): keep one chat completion id per stream and always stream completed responses by @devin-ai-integration[bot] in #34539
- fix(guardrails): compress content-parts messages in headroom guardrail (Anthropic traffic) by @tin-berri in #34586
- fix(router): release the pre-routing strategy slot when a deployment is replaced or deleted by @shivamrawat1 in #34564
- fix(guardrails): classify all 4xx HTTPException guardrail blocks as intervened by @devin-ai-integration[bot] in #33821
- chore: rebuild Admin UI bundle for release by @yuneng-berri in #34859
- test: unstale the reasoning-effort grid count and the responses bridge test by @yuneng-berri in #34868
- test(e2e): realign Admin UI specs with the MCP dialog and keyless landing by @yuneng-berri in #34870
- test(e2e): unblock the ui suite, fix the mcp registration race, park two known product bugs by @mubashir1osmani in #34853
- test(e2e): make MCP and prometheus e2e tests robust to data-plane sync lag by @ryan-crabbe-berri in #34854
- Fix cache leakage card layout to keep date picker on right by @tin-berri in #34885
- fix(gateway): route /a2a through the gateway component by @ryan-crabbe-berri in #34958
- fix(e2e): poll for both spend rows before asserting the cache-hit contract by @ryan-crabbe-berri in #34968
- test(e2e): skip passthrough headers test until stage can route custom paths to provider creds by @ryan-crabbe-berri in #34980
- feat(ui): mark Cost Optimization as beta in the left nav by @yuneng-berri in #34984
- fix(proxy): avoid DB outage during planned RDS IAM rotation by @mubashir1osmani in #34749
- chore(ci): promote internal staging to main by @yuneng-berri in #34864
- test(e2e): bound the post-/model/new servable wait at 40s by @yuneng-berri in #35020
- test(e2e): poll MCP tools across multi-worker lag (#35047) by @yuneng-berri in #35049
- chore(release): sync rc/1.95.0 with the v1.95.0-rc.1 main SHA by @yuneng-berri in #35414
Full Changelog: v1.95.0-rc.2...v1.95.0-rc.3