Azure Cosmos DB SDK Best Practices
SDK usage patterns and framework-specific guidance for Azure Cosmos DB across .NET, Java, Python, Spring Boot, and LangChain.
When to Apply
Reference these guidelines when:
- Configuring CosmosClient instances
- Choosing connection modes (Direct vs Gateway)
- Handling retries and throttling
- Setting up the Cosmos DB Emulator
- Using ETags for optimistic concurrency
- Integrating with Spring Boot or LangChain
- Configuring availability and resilience features
Rules
- sdk-singleton-client - Reuse CosmosClient as singleton
- sdk-async-api - Use async APIs for throughput
- sdk-retry-429 - Handle 429s with retry-after
- sdk-connection-mode - Use Direct mode for production
- sdk-preferred-regions - Configure preferred regions
- sdk-excluded-regions - Exclude regions experiencing issues
- sdk-availability-strategy - Configure availability strategy
- sdk-circuit-breaker - Use circuit breaker for fault tolerance
- sdk-diagnostics - Log diagnostics for troubleshooting
- sdk-serialization-enums - Serialize enums as strings
- sdk-emulator-ssl - Configure SSL for Cosmos DB Emulator
- sdk-etag-concurrency - Use ETags for optimistic concurrency
- sdk-conditional-create-etag - Reject duplicates atomically
- sdk-request-options-per-call - Never reuse request options
- sdk-patch-counter-increment - Use patch incr for atomic counters
- sdk-continuation-token-null-guard - Guard empty continuation tokens
- sdk-java-content-response - Enable content response on writes (Java)
- sdk-java-cosmos-config - Configure Cosmos DB in Spring Boot
- sdk-java-spring-boot-versions - Match Java to Spring Boot versions
- sdk-local-dev-config - Configure local development
- sdk-dotnet-cosmos-package-id - Use correct NuGet package
- sdk-newtonsoft-dependency - Reference Newtonsoft.Json explicitly
- sdk-python-async-deps - Include aiohttp for Python async
- sdk-go-partition-key-metadata - Use current Go SDK with explicit partition-key metadata
- sdk-spring-data-annotations - Annotate entities for Spring Data
- sdk-spring-data-repository - Use CosmosRepository correctly
- sdk-dotnet-namespace-collision - Avoid namespace collisions
- sdk-langchain-cosmosdb-saver - CosmosDBSaver for LangGraph
- sdk-langchain-async-checkpointer - Async container init
- sdk-langchain-mcp-persistent-session - Persistent MCP sessions
- sdk-langchain-mcp-tool-content-format - MCP tool content format
- sdk-langgraph-mcp-tool-filtering - Filter MCP tools by prefix
- sdk-langchain-js-vectorstore-init - LangChain JS vectorstore init
- sdk-langchain-js-chat-history - LangChain JS chat history
- sdk-langchain-js-embedding-model - LangChain JS embedding model
- sdk-langchain-js-filter-injection - LangChain JS filter injection
- sdk-langchain-js-fulltext-prerequisites - LangChain JS FTS prerequisites
- sdk-langchain-js-managed-identity - LangChain JS managed identity
- sdk-langchain-js-search-types - LangChain JS search types
- sdk-langchain-js-semantic-cache - LangChain JS semantic cache