Make Custom Serialization of Swift Codable Types easy with Annotations
Last updated Apr 23, 2026
708
Stars
42
Forks
2
Issues
0
Stars/day
Attention Score
48
Topics
Language breakdown
No language data available.
โธ Files
click to expand
README
CodableWrappers
Simplified Serialization with Property Wrappers
Make Complex Codable Serialization a breeze with declarative annotations!
@CustomCodable @SnakeCase
struct User: Codable {
let firstName: String
let lastName: String
@SecondsSince1970DateCoding
var joinDate: Date
@CustomCodingKey("data")
var imageData: Data
}
3.0 released! Release Notes
Documentation
Full DocC documentation here thanks to the Swift Package Index!
Installation
Swift Package Manager \Preferred
URL:
https://github.com/GottaGetSwifty/CodableWrappers.git
Manifest:
dependencies: [
.package(url: "https://github.com/GottaGetSwifty/CodableWrappers.git", .upToNextMajor(from: "3.0.0" )),
]
CocoaPods
\WARNING CocoaPods is not currently supported for version 3.0 to avoid complications with Swift Macros. ---
pod 'CodableWrappers', '~> 2.0.0'
Available CodingKey Macros
- @CustomCodable
- @CustomCodingKey(String)
- @CodingKeyPrefix(String)
- @CodingKeySuffix(String)
- @CamelCase
- @FlatCase
- @PascalCase
- @UpperCase
- @SnakeCase
- @CamelSnakeCase
- @PascalSnakeCase
- @ScreamingSnakeCase
- @KebabCase
- @CamelKebabCase
- @PascalKebabCase
- @ScreamingKebabCase
Available Property Wrappers
- @EncodeNulls
- Lossy Collections
- Empty Defaults
- Other Fallbacks
- @OmitCoding
- @Base64Coding
- @SecondsSince1970DateCoding
- @MillisecondsSince1970DateCoding
- @DateFormatterCoding\
- @ISO8601Coding
- @ISO8601DateFormatStyleCoding\
- @NonConformingFloatCoding\
- @NonConformingDoubleCoding\
- Bool Coding
- Additional Customization
- Property Mutability
- Only Encoding or Decoding
Additional Customization
Additional Links
Compatibility
- 3.x supports Swift 5.9+
- 2.x supports Swift 5.2+
- 1.x supports Swift 5.1+
Contributions
If there is a standard Serialization or Coding Key strategy that could be added feel free to open an issue requesting it and/or submit a pull request with the new option.
๐ More in this category