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.87.0-rc.1Verify 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.87.0-rc.1/cosign.pub \
ghcr.io/berriai/litellm:v1.87.0-rc.1Expected 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
- feat(gemini): add gemini-3.1-flash-lite model cost map by @Sameerlite in #28320
- fix(spend_counter): seed Redis counter via SET NX to prevent cross-pod double-seed by @milan-berri in #27854
- fix(proxy): normalize batch file IDs before ManagedObjectTable write by @Sameerlite in #28339
- fix(router): use forwarded model_id for native Azure container IDs by @Sameerlite in #27921
- fix(ui): restore log filter loading indicator by @ryan-crabbe-berri in #28282
- test(e2e): migrate runner to uv, add All Proxy Models key test by @ryan-crabbe-berri in #28313
- feat(ui): team passthrough routes create parity + edit load fix by @ryan-crabbe-berri in #28098
- fix(mcp): JWT on tools/list and REST tools/call server resolution by @Sameerlite in #28227
- feat(interactions): migrate to Google Interactions API steps schema (May 2026) by @Sameerlite in #28153
- test(ui-e2e): admin key creation with a specific proxy model by @ryan-crabbe-berri in #28365
- fix(vertex_ai): omit function_call id on Vertex Gemini 3.5+ tool turns by @Sameerlite in #28324
- feat(mcp): allow native MCP OAuth support for cursor by @Sameerlite in #28327
- fix(interactions): never drop streamed text deltas; always emit terminal completion by @mateo-berri in #28394
- fix(proxy): expose Prisma idle/connect timeout + extra DB URL params by @yassin-berriai in #28395
- Litellm oss staging 1 by @Sameerlite in #28337
- fix: serialize guardrail_response to JSON in OTEL traces by @yassin-berriai in #28362
- chore(ci): merge dev branch by @yuneng-berri in #28314
- test(realtime): expect session.created as xAI realtime initial event by @yuneng-berri in #28424
- feat(tests): behavior-pinning harness + Key Tier-1 matrix by @yuneng-berri in #28321
- fix(proxy): hydrate wildcard discovery credentials (#28284) - CCI Run by @yuneng-berri in #28419
- Litellm oss staging 04 21 2026 2 by @Sameerlite in #26569
- chore(ci): merge dev branch by @yuneng-berri in #28290
- fix(vertex_gemma): strip
context_managementfrom request body by @mateo-berri in #28438 - fix(logging): recalculate cost after router retry failures by @milan-berri in #28476
- fix(otel): emit guardrail span on violation, surface status + categories by @yassin-berriai in #28364
- test(proxy): behavior-pinning matrix for team management endpoints by @yuneng-berri in #28441
- test(vertex_ai): tolerate transient 500 in google maps grounding test by @yuneng-berri in #28503
- fix(docker): restore npm to non_root builder image by @yuneng-berri in #28519
- chore(ci): bump deps by @yuneng-berri in #28524
- build(deps-dev): bump black to 26.3.1 and apply formatting by @yuneng-berri in #28525
- chore(deps): bump deps by @yuneng-berri in #28528
- test(e2e): forward LITELLM_LICENSE to UI e2e proxy by @ryan-crabbe-berri in #28398
- Add granian as a ASGI compliant web server. Provider better throughput stability, by @harish-berri in #26027
- Fix conflicts and UI by @Sameerlite in #28477
- Add error_description and hint for oauth flows by @Sameerlite in #28471
- feat(mcp): Add tool call and tool list support via UI for Oauth mcps by @Sameerlite in #28454
- feat(proxy): persist allowlisted OIDC claims in CLI SSO poll by @Sameerlite in #28463
- fix(responses): use OpenAI SSEDecoder for Responses API streaming by @Sameerlite in #28566
- Litellm oss staging 2 by @Sameerlite in #28582
- [internal copy of #28269] Codex cli jwt team alias by @mateo-berri in #28621
- fix(check_licenses): read PEP 639 license-expression metadata by @yuneng-berri in #28529
- test(proxy): behavior-pinning matrix for tier-2/3 key + team management endpoints by @yuneng-berri in #28620
- chore(test): remove dead old Playwright e2e suite by @ryan-crabbe-berri in #28632
- fix(sagemaker): send native Cohere embed payload to Cohere SageMaker endpoints by @milan-berri in #28613
- style: apply black formatting to fix lint CI (LIT-3274) (#28639) by @krrish-berri-2 in #28641
- fix(bedrock): decouple STS region from Bedrock aws_region_name by @milan-berri in #28245
- test(streaming): tolerate Vertex 429 wrapped in MidStreamFallbackError by @yuneng-berri in #28669
- feat(guardrails): add Microsoft Purview DLP guardrail by @Sameerlite in #24966
- fix(mcp): forward upstream initialize instructions on cold gateway init by @milan-berri in #28231
- chore(ci): promote internal staging to main by @yuneng-berri in #28680
- CI: copy of #25177 (OCI GenAI: embeddings, streaming/reasoning fixes, model catalog) by @mateo-berri in #28223
- Encrypt callback_vars in key/team metadata in DB by @Michael-RZ-Berri in #27141
- perf: reduce per-request and per-chunk overhead across Anthropic streaming hot paths by @yassin-berriai in #28289
- feat(azure): add Speech STT config support by @ishaan-berri in #27482
- test(proxy): phase-4 payload behavior pinning for tier-2/3 key + team management endpoints by @yuneng-berri in #28681
- feat(prometheus): emit per-token-type detail metrics (LIT-3220) (#28372) by @ishaan-berri in #28378
- fix(otel): stamp http.response.status_code on all error responses by @ryan-crabbe-berri in #28405
- chore(ui): build ui by @yuneng-berri in #28707
- fix(helm): drop main- prefix from default image tag by @yuneng-berri in #28710
- test(model_prices): allow audio_transcription_config in schema by @yuneng-berri in #28708
- chore(ci): promote internal staging to main by @yuneng-berri in #28709
Full Changelog: v1.87.0-dev.1...v1.87.0-rc.1