sindresorhus
Defaults
Swift

πŸ’Ύ Swifty and modern UserDefaults

Last updated Jul 6, 2026
2.5k
Stars
163
Forks
22
Issues
+1
Stars/day
Attention Score
93
Language breakdown
No language data available.
β–Έ Files click to expand
README

Defaults

Swifty and modern UserDefaults

Store key-value pairs persistently across launches of your app.

It uses UserDefaults underneath but exposes a type-safe facade with lots of nice conveniences.

It's used in production by all my apps (4 million+ users).

Highlights

  • Strongly typed: You declare the type and default value upfront.
  • SwiftUI: Property wrapper that updates the view when the UserDefaults value changes.
  • Codable support: You can store any Codable value, like an enum.
  • NSSecureCoding support: You can store any NSSecureCoding value.
  • Observation: Observe changes to keys.
  • Debuggable: The data is stored as JSON-serialized values.
  • Customizable: You can serialize and deserialize your own type in your own way.
  • iCloud support: Automatically synchronize data between devices.

Benefits over @AppStorage

  • You define strongly-typed identifiers in a single place and can use them everywhere.
  • You also define the default values in a single place instead of having to remember what default value you used in other places.
  • You can use it outside of SwiftUI.
  • You can observe value updates.
  • Supports many more types, even Codable.
  • Easy to add support for your own custom types.
  • Comes with a convenience SwiftUI Toggle component.

Compatibility

  • macOS 11+
  • iOS 14+
  • tvOS 14+
  • watchOS 9+
  • visionOS 1+

Install

Add https://github.com/sindresorhus/Defaults in the β€œSwift Package Manager” tab in Xcode.

Documentation

Full documentation

Usage

import Defaults

extension Defaults.Keys { static let quality = Key<Double>("quality", default: 0.8) }

Defaults[.quality] //=> 0.8

Defaults[.quality] = 0.5 //=> 0.5

You can also use it in SwiftUI:

struct ContentView: View {
	@Default(.quality) var quality

var body: some View { Slider(value: $quality, in: 0...1) } }

Maintainers

Related

Β© 2026 GitRepoTrend Β· sindresorhus/Defaults Β· Updated daily from GitHub