Architecture
SquidStd is a modular .NET toolkit. Rather than a single monolithic library, it ships one package per capability, so an application depends only on the pieces it actually uses.
Modular by design
Every capability is split in two: an *.Abstractions package that holds the contracts (interfaces and DTOs) and one or more provider packages that implement them. For example SquidStd.Messaging.Abstractions defines the messaging contracts, while SquidStd.Messaging, SquidStd.Messaging.RabbitMq, and SquidStd.Messaging.Sqs provide implementations. This keeps call sites coupled to contracts, not to a concrete backend. See abstractions first for why this matters.
Layers
The dependency flow runs in one direction:
- Core (
SquidStd.Core) - primitives, options, and the building blocks everything else sits on. - Abstractions - per-capability contract packages.
- Providers - concrete implementations of those contracts.
- Host -
SquidStdBootstrapcomposes services and runs them.
Higher layers depend on lower ones, never the reverse.
Package graph
graph TD
subgraph Foundation
Core[SquidStd.Core<br/>primitives, options]
Abstr[SquidStd.*.Abstractions<br/>contracts + DTOs]
end
subgraph Implementations
Services[SquidStd.Services.Core<br/>config, events, jobs, timers]
Providers[Provider packages<br/>Redis, RabbitMQ, S3, ...]
InMem[In-memory providers<br/>for tests]
end
Core --> Services
Core --> Abstr
Abstr --> Providers
Abstr --> InMem
Services --> Host[SquidStdBootstrap]
Providers --> Host
Host --> App[Your application]
Next
- Bootstrap lifecycle - how the host starts and stops services.
- Abstractions first - the contract-plus-provider pattern in depth.