Duplicate work
Multiple screens ask for the same resource and quietly multiply traffic, decoding, and battery cost.
Production networking for Swift 6.2+
NovaNetworkClient turns typed requests, shared work, cancellation, resilience, authentication, offline delivery, and realtime connections into one coherent system.
The real problem
Multiple screens ask for the same resource and quietly multiply traffic, decoding, and battery cost.
Retry loops, cache rules, auth locks, and cancellation flags accumulate across services and view models.
Offline writes, reconnects, rate limits, and token expiry appear only after the happy path ships.
One execution model
A stable request identity gives Nova one place to coordinate callers and apply production behavior. The API stays explicit while the infrastructure stays reusable.
Explore the architecture →Method, URL, body, headers, and authentication scope form a typed request.
A deterministic fingerprint joins equivalent in-flight work and tracks each subscriber.
Resilience, cache, auth, transport, decoding, and telemetry run through one pipeline.
Batteries included, decisions exposed
Adopt the pieces you need today without painting the next feature into a corner.
Equivalent callers join one request. Each caller keeps independent cancellation semantics.
Retry, rate limiting, circuit breaking, and HTTP-aware caching live in one execution pipeline.
Coordinate token refresh and prevent a burst of unauthorized requests from becoming a refresh stampede.
Queue writes, replay them deliberately, and model recovery instead of hiding it behind a transport wrapper.
Use WebSocket, Server-Sent Events, multipart uploads, downloads, and progress APIs from the same package.
Inspect lifecycle events, metrics, diagnostics, and deterministic test support without replacing the client.
Generate request construction from an annotated Swift type, or generate whole endpoint types from an OpenAPI document.
Capture real traffic into a reviewable cassette and replay it in tests, previews, and offline demo builds.
Record what the client did, read retry waterfalls, and export a HAR that opens in any network inspector.
OAuth 2.0 with PKCE, every grant, safe token storage, and one refresh shared by every caller.
Server state by key for the screens that render it, with stale reads, shared fetches, and optimistic mutations.
From ad hoc to intentional
Small surface, serious behavior
The simple case remains simple. Production capabilities are configured around it instead of leaking into every call site.
Read Getting Startedlet request = APIRequest(
method: .get,
url: apiURL.appending(path: "users/42")
)
let profile: Profile = try await client.load(
request: request,
authScope: "current-user"
)Learn by building
Decode a public API response into a small Sendable model.
02See equivalent callers join one in-flight network operation.
03Choose deliberate retry, caching, and typed error boundaries.
04Move repeated server operations behind reusable endpoint types.
Built for the code after the prototype
Start with one typed request. Add production policies when your app needs them.