---
title: "Infrastructure and delivery"
description: "Portable cache, object storage, mail, and queue contracts with explicit provider ownership."
tags: ["packages","infrastructure","delivery","adapters"]
---

Infrastructure packages normalize the small set of behavior application capabilities need while leaving connections, credentials, lifecycle, observability, and native provider access under application control.

## Packages

| Package                                                                                   | Plan                       | Responsibility                                               |
| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------ |
| [`@playstack/cache`](/docs/packages/infrastructure/cache)                                 | <PlanTierDot tier="pro" /> | JSON caching, tag invalidation, and stampede-safe reads.     |
| [`@playstack/cache-next`](/docs/packages/infrastructure/cache-next)                       | <PlanTierDot tier="pro" /> | Shared Next.js caching and signed revalidation.              |
| [`@playstack/storage`](/docs/packages/infrastructure/storage)                             | <PlanTierDot tier="pro" /> | Streaming object storage and explicit URL capabilities.      |
| [`@playstack/nest-storage`](/docs/packages/infrastructure/nest-storage)                   | <PlanTierDot tier="pro" /> | Named NestJS storage-driver injection.                       |
| [`@playstack/mail`](/docs/packages/infrastructure/mail)                                   | <PlanTierDot tier="pro" /> | Typed rendering, envelopes, and provider delivery.           |
| [`@playstack/queues`](/docs/packages/infrastructure/queues)                               | <PlanTierDot tier="pro" /> | Typed jobs, namespacing, retries, failure hooks, and traces. |
| [`@playstack/nest-queues`](/docs/packages/infrastructure/nest-queues)                     | <PlanTierDot tier="pro" /> | NestJS queue injection and worker lifecycle.                 |
| [`@playstack/local-first`](/docs/packages/infrastructure/local-first)                     | <PlanTierDot tier="pro" /> | Atomic local mutations and push/pull synchronization.        |
| [`@playstack/local-first-indexeddb`](/docs/packages/infrastructure/local-first-indexeddb) | <PlanTierDot tier="pro" /> | IndexedDB transactions and browser coordination.             |
| [`@playstack/local-first-expo`](/docs/packages/infrastructure/local-first-expo)           | <PlanTierDot tier="pro" /> | Expo SQLite transactions and mobile coordination.            |
| [`@playstack/registry`](/docs/packages/infrastructure/registry)                           | <PlanTierDot tier="pro" /> | Private package registry core with host-owned access.        |
| [`@playstack/nest-registry`](/docs/packages/infrastructure/nest-registry)                 | <PlanTierDot tier="pro" /> | NestJS binding for the read-only npm registry protocol.      |
| [`@playstack/registry-swift`](/docs/packages/infrastructure/registry-swift)               | <PlanTierDot tier="pro" /> | Swift Package Manager registry reads over the same core.     |

## Application-owned clients

Every adapter accepts or exposes the underlying provider client. That lets the composition root control pooling, credentials, shutdown, transactions, metrics, and provider-specific escape hatches.

## Adopt independently

These packages do not form a required platform. Use the cache without the queue, the storage contract without mail, or none of them when a provider SDK already gives the application the right boundary.
