SwiftTweaks (2026)

Most non-trivial apps end up needing three different kinds of values: a default baked into the binary, a server-side override for things like feature flags and experiment parameters, and a local override that lives in a debug menu so you can flip things on a device without rebuilding. The usual approach is to wire those three sources together by hand for every single config value, and it gets out of hand fast.

SwiftTweaks centralizes that pattern. The basic idea is that every configurable value in your app is a ConfigItem that resolves through three layers in order:

  1. An active tweak override, if one is set
  2. An external server config value, if the resolver returns one
  3. The hardcoded default

Production code just reads one typed, observable value. It doesn’t care where the answer came from. UI updates automatically when any layer changes, since the underlying storage is @Observable.

Tweaks themselves are typed and addressable by a (table, section, row) coordinate, and they persist across launches. The library supports the obvious types: toggles, freeform text/numbers, selection menus, tristate booleans. You drop a TweakViewController into your debug menu and get a fully built-out tweak panel without writing any UI.

It’s built on SwiftAsyncEx and the new Observation framework, so there’s no Combine in the way; just plain @Observable boxes you can read directly.

Source on github.