Repository navigation
Version 10.2.0 fixes a TLS certificate-verification flaw in the gRPC client and adds full-text match operators to the Field filter builder. It targets the same 2026-07 API as 10.1.0 and removes or renames nothing.
What to do:
- Upgrade to 10.2.0 if you use the gRPC client.
- Whichever client you use, upgrade
certifito 2026.10.19 or later.
Security
gRPC users: upgrade to 10.2.0 (RUSTSEC-2026-0382, CVE-2026-111943, 7ecd4b0)
- Affected: 9.0.0 through 10.1.0, if your code uses
pc.index(..., grpc=True),PineconeGRPC, orGrpcIndex/GRPCIndex. - Risk: the bundled
rustls-webpkican accept certificates chained through emSign intermediates whose private keys are now public. An attacker with those keys and a position on your network path could impersonate your index and read your API key and data. - Fix: 10.2.0 bundles
rustls-webpki0.103.16, which rejects those chains.
Everyone, gRPC users included: upgrade certifi (GHSA-6q48-6c7w-9gw2)
- Affected: all control-plane and data plane REST calls, which go through httpx and trust whichever
certifiis installed in your environment. - Risk:
certifireleases before 2026.10.19 trust the same compromised emSign roots. - Why upgrading
pineconeisn't enough: the SDK deliberately doesn't pincertifi, so it stays compatible with the other packages in your environment. - Action: run
pip install --upgrade "certifi>=2026.10.19"(oruv add "certifi>=2026.10.19") and keep that floor in your own dependencies. - Custom CA bundles: if you pass
ssl_ca_certsor setSSL_CERT_FILEorSSL_CERT_DIR, make sure that bundle no longer trusts the emSign roots.
No action needed for tokio: the bundled tokio moves to 1.51.6 for RUSTSEC-2026-0386. The SDK never calls the affected API.
What's new
Full-text match filters for documents (docs, 9fc62f4)
Narrow document search and fetch results by the words in a text field, not only by exact values. Field gains three methods:
match_phrase: the words, in ordermatch_all: every word, in any ordermatch_any: at least one of the words
Things to know:
- Fields: they work on
stringfields declared withfull_text_search, or withembed/sparse_embedunless you setstore_text=False. - Methods: use them in the
filterofdocuments.searchanddocuments.fetch. The server rejects them indocuments.deleteanddocuments.update. - Usage: as with every
Fieldfilter, pass the result's.to_dict().
from pinecone import EmbedQuery, Field, Pinecone
pc = Pinecone()
index = pc.index("articles") # "body" is a string field declared with embed=True
# Semantic search, limited to documents whose body contains "roman aqueduct"
# and whose year metadata is 100 or later.
results = index.documents.search(
namespace="en",
top_k=5,
score_by=[EmbedQuery(field="body", query="how did Rome move water")],
filter=(Field("body").match_phrase("roman aqueduct") & Field("year").gte(100)).to_dict(),
)Fixes
index.create_namespace(name="__default__")still raises "reserved and cannot be created", but the message no longer claims the namespace always exists. It now explains that this holds only on an index created withdimension/metric, and that on a document index you create it by upserting documents into it. (bbe1282)
Docs
New guides for document indexes:
Upgrading
pip install --upgrade pinecone "certifi>=2026.10.19"
# or
uv add "pinecone>=10.2,<11" "certifi>=2026.10.19"Full Changelog: v10.1.0...v10.2.0