Pluggable foundation blocks for building loosely coupled distributed apps.
- π Pluggable implementations - Swap Redis, Azure, AWS, or in-memory with no code changes
- π§ͺ Developer friendly - In-memory implementations for fast local development and testing
- π DI native - Built for Microsoft.Extensions.DependencyInjection
- π― Interface-first - Code against abstractions, not implementations
- β‘ Production ready - Battle-tested in high-scale applications
- π Consistent APIs - Same patterns across caching, queues, storage, and more
| Feature | Description |
|---|---|
| Caching | In-memory, Redis, and hybrid caching with automatic invalidation |
| Queues | Reliable message queuing with Redis, Azure, AWS SQS |
| Locks | Distributed locking and throttling |
| Messaging | Pub/sub with Redis, RabbitMQ, Kafka, Azure Service Bus |
| Jobs | Background job processing with queue integration |
| File Storage | Unified file API for disk, S3, Azure Blob, and more |
| Resilience | Retry policies, circuit breakers, and timeouts |
dotnet add package Foundatio// Caching
ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("user:123", user, TimeSpan.FromMinutes(5));
var cached = await cache.GetAsync<User>("user:123");
// Queuing
IQueue<WorkItem> queue = new InMemoryQueue<WorkItem>();
await queue.EnqueueAsync(new WorkItem { Data = "Hello" });
var entry = await queue.DequeueAsync();
// File Storage
IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("docs/readme.txt", "Hello World");
// Distributed Locks
ILockProvider locker = new CacheLockProvider(cache, messageBus);
await using var handle = await locker.AcquireAsync("resource-key");| Provider | Caching | Queues | Messaging | Storage | Locks |
|---|---|---|---|---|---|
| In-Memory | β | β | β | β | β |
| Redis | β | β | β | β | β |
| Azure Storage | β | β | |||
| Azure Service Bus | β | β | |||
| AWS (S3/SQS) | β | β | |||
| RabbitMQ | β | ||||
| Kafka | β | ||||
| Minio | β | ||||
| Aliyun | β | ||||
| SFTP | β |
Key topics:
- Getting Started - Installation and setup
- Caching - Cache implementations and patterns
- Queues - Message queue processing
- Jobs - Background job execution
- Configuration - Options and settings
Want the latest CI build before it hits NuGet? Add the Feedz source and install the pre-release version:
dotnet nuget add source https://f.feedz.io/foundatio/foundatio/nuget -n foundatio-feedz
dotnet add package Foundatio --prereleaseOr add to your NuGet.config:
<configuration>
<packageSources>
<add key="foundatio-feedz" value="https://f.feedz.io/foundatio/foundatio/nuget" />
</packageSources>
<packageSourceMapping>
<packageSource key="foundatio-feedz">
<package pattern="Foundatio.*" />
</packageSource>
</packageSourceMapping>
</configuration>Contributions are welcome! Please feel free to submit a Pull Request. See our documentation for development guidelines.
Development Setup:
- Clone the repository
- Open
Foundatio.slnxin Visual Studio or VS Code - Run
dotnet buildto build - Run
dotnet testto run tests
- Foundatio.Mediator - Blazingly fast, convention-based C# mediator powered by source generators
Apache 2.0 License