Packages and namespaces
Each library uses one name for its NuGet package, assembly, and root namespace: install Respire.Search, import Respire.Search. The .NET Aspire integrations are the exception; they follow Aspire's Aspire.<Product> naming.
Public API review and deprecation
Every shipping package has a checked-in public API baseline in
src/<package>/PublicAPI.Shipped.txt and PublicAPI.Unshipped.txt. Both net8.0 and net10.0
check the same baseline: the packages expose the same public surface on both frameworks.
These baselines were seeded from the pre-2.0 API; the filename does not declare a stable release.
The PublicApiAnalyzers package checks signatures, including nullable annotations, during normal
builds. Adding, changing, or removing an API without updating its declaration fails the build.
The Modular Pipeline CI workflow builds all packages and frameworks with these checks enabled.
For contributors:
- Add new declarations to
PublicAPI.Unshipped.txtusing the analyzer's Declare public API code fix. Review the diff alongside the implementation. - Keep shipped declarations. For an intentional removal, add
*REMOVED*followed by the old declaration to the unshipped file. A changed signature is a removal plus an addition. - Build both target frameworks before submitting the change. API baselines make changes visible for review; they do not authorize a breaking change. After 2.0, preserve compatibility or plan the removal for a major release.
- At release time, merge accepted unshipped declarations into the shipped baseline, applying
removal markers, and reset the unshipped file to
#nullable enable.
Deprecations are allowed, including after 2.0. An [Obsolete] attribute must provide a nonempty
DiagnosticId and an HTTPS UrlFormat containing {0} (the diagnostic ID), pointing to a published
migration note. The note should explain the replacement and migration steps. CI runs
Respire.PublicApi.Tests on net8.0 and net10.0 to check exported public types and members in every
shipping assembly. Its project references and expected assembly manifest come from
RespirePackageProjects in Directory.Build.props, plus Respire.Analyzers, which ships inside
the core package rather than as its own package; a missing assembly fails validation.
The compiler's required-member compatibility marker is excluded; authored deprecations on
constructors with required members still need migration metadata.
These checks make no network requests; reviewers verify that the migration note exists.
Packing also runs SDK package validation. See Contributing API changes for the released-package baseline, intentional-break process, and experimental API exceptions.
Choose a package
| Package, assembly, and root namespace | Purpose |
|---|---|
Respire | Core RESP client, commands, connections, serialization, and built-in compression abstractions |
Respire.Json | Redis JSON documents |
Respire.Search | Redis Search, indexing, aggregation, and vector queries |
Respire.VectorData | Explicit AOT-friendly VectorData hash/JSON collections, KNN and hybrid search |
Respire.AI | Redis chat history, Agent Framework history providers, semantic response caching, and exact-text embedding caching |
Respire.TimeSeries | Redis time series |
Respire.Probabilistic | Bloom, Cuckoo, Count-Min Sketch, Top-K, and t-digest |
Respire.Aws | AWS IAM credentials for ElastiCache and MemoryDB |
Respire.Azure | Microsoft Entra credentials for Azure Managed Redis |
Respire.Gcp | Google Cloud IAM credentials for Memorystore for Redis Cluster and Valkey |
Respire.Caching | IDistributedCache and IBufferDistributedCache integration |
Respire.Caching.Hybrid | Redis-backed L2 storage for HybridCache |
Respire.OutputCaching | ASP.NET Core output caching store |
Respire.Idempotency | ASP.NET Core idempotency-key response replay |
Respire.RateLimiting | Redis-backed ASP.NET Core rate limiting policies |
Respire.DataProtection | DataProtection key storage and payload encryption |
Respire.FusionCache | FusionCache backplane and distributed locker sharing an existing Respire client |
Respire.SignalR | SignalR scale-out sharing an existing Respire client |
Respire.Streaming | Hosted stream consumers with bounded concurrency and scoped handlers |
Respire.Streaming.Dashboard | Authorized ASP.NET Core dashboard for job queues, stream groups, pending deliveries, and dead-letter actions |
Respire.StackExchangeCompat | Binary-safe value conversion, native command bridge, and a limited IConnectionMultiplexer adapter for incremental StackExchange.Redis migration |
Respire.Coordination | Rate limiters, semaphores, read-write locks, latches, leases, and Redlock |
Respire.DependencyInjection | .NET dependency injection registration |
Respire.HealthChecks | ASP.NET Core health checks using existing client connections |
Respire.Resilience | Polly v8 and Microsoft.Extensions.Resilience with one command retry owner |
Aspire.Respire | .NET Aspire client registration, configuration, health checks, and telemetry |
Aspire.Respire.DistributedCaching, Aspire.Respire.HybridCaching, Aspire.Respire.OutputCaching | IDistributedCache, HybridCache, and output caching on an Aspire-registered client |
Respire.Compression.Lz4 | Optional LZ4 value codec |
Respire.Serialization.MessagePack | MessagePack serializer and DI registration |
Respire.Serialization.Protobuf | protobuf-net serializer and DI registration |
Respire.Serialization.MemoryPack | MemoryPack serializer and DI registration |
Respire.Compression.Zstd | Optional Zstandard value codec |
Respire.Testing | In-memory RESP test server |
Respire.Testing.Containers | Redis and Valkey container fixtures |
Respire.Analyzersships inside the coreRespirepackage, not as its own package.- Subnamespaces such as
Respire.SerializationandRespire.Compressionbelong to the core package.Respire.Compressionholds the shared codec options; importRespire.Compression.Lz4orRespire.Compression.Zstdfor a codec. - The Aspire packages put their registration methods in
Microsoft.Extensions.Hosting. - Extension properties such as
redis.Jsonandredis.Coordinationneed C# 14 (thenet10.0default). On earlier language versions, construct the wrapper:new RespireJsonClient(redis)ornew RespireCoordination(redis).
Keep internal API consumers on the same version
Respire.Caching, Respire.Coordination, Respire.StackExchangeCompat, Respire.DataProtection, Respire.Json, Respire.Compression.Lz4, Respire.Compression.Zstd, Respire.Testing, Respire.Streaming, and Respire.Streaming.Dashboard depend on core implementation details. Their NuGet packages require the exact Respire version they were built against, including the prerelease suffix. Upgrade these packages together with Respire; mixing versions can break internal calls at runtime.
The three Respire.Serialization.* adapters also pin their core dependency exactly so
serializer and client packages are upgraded together, even though they use public APIs.
Redis features and custom modules
Redis Open Source 8 includes JSON, Search, time series, and probabilistic data types; their client APIs are optional packages. Earlier Redis needs the matching modules or Redis Stack, and other RESP servers may support only some commands. Installing a package does not enable a server feature.
The name Respire.Extensions.<ModuleName> is reserved for custom, separately installed Redis modules; no current package uses it. For custom commands, use the raw command API or command generator.
For older Respire.Extensions.* references, see the package migration guide.