Skip to content

FoundatioFx/Foundatio

Repository files navigation

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

✨ Why Choose Foundatio?

  • πŸ”Œ 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

🧱 Core Building Blocks

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

πŸš€ Quick Start

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");

πŸ“¦ Implementations

Provider Caching Queues Messaging Storage Locks
In-Memory βœ… βœ… βœ… βœ… βœ…
Redis βœ… βœ… βœ… βœ… βœ…
Azure Storage βœ… βœ…
Azure Service Bus βœ… βœ…
AWS (S3/SQS) βœ… βœ…
RabbitMQ βœ…
Kafka βœ…
Minio βœ…
Aliyun βœ…
SFTP βœ…

πŸ“š Learn More

πŸ‘‰ Complete Documentation

Key topics:

πŸ“¦ CI Packages (Feedz)

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 --prerelease

Or 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>

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. See our documentation for development guidelines.

Development Setup:

  1. Clone the repository
  2. Open Foundatio.slnx in Visual Studio or VS Code
  3. Run dotnet build to build
  4. Run dotnet test to run tests

πŸ”— Related Projects

  • Foundatio.Mediator - Blazingly fast, convention-based C# mediator powered by source generators

πŸ“„ License

Apache 2.0 License

Thanks to all the people who have contributed

contributors