Swift encoder and decoder for INI files.

What's New

Improving blanks & trimmings.


Perfect INI Codable

Get Involed with Perfect!

Star Perfect On Github Stack Overflow Follow Perfect on Twitter Join the Perfect Slack

Swift 4.0 Platforms OS X | Linux License Apache PerfectlySoft Twitter Slack Status

This project provides an encoder / decorder for INI files.

This package builds with Swift Package Manager of Swift 4 Tool Chain and is part of the Perfect project but can be used as an independent module.

Quick Start

This library provides a pair of INIEncoder and INIDecoder for INI files.

Encodable to INI

import PerfectINI
struct Person: Codable {
  public var name = ""
  public var age = 0

struct Place: Codable {
  public var location = ""
  public var history = 0

struct Configuration: Codable {
  public var id = 0
  public var tag = ""
  public var person = Person()
  public var place = Place()

let rocky = Person(name: "rocky", age: 21)
let hongkong = Place(location: "china", history: 1000)

let conf = Configuration(id: 101, tag: "my notes", person: rocky, place: hongkong)
let encoder = INIEncoder()
let data = try encoder.encode(conf)

The outcome of encoder is a standard Swift Data object, and the content should be like this:

id = 101
tag = my notes

name = rocky
age = 21

history = 1000
location = china

INI to Decodable

Assuming Configuration and data are ready:

let decoder = INIDecoder()
let config = try decoder.decode(Configuration.self, from: data)
// configuration loaded.


We are transitioning to using JIRA for all bugs and support related issues, therefore the GitHub issues has been disabled.

If you find a mistake, bug, or any other helpful suggestion you'd like to make on the docs please head over to and raise it.

A comprehensive list of open issues can be found at

Further Information

For more information on the Perfect project, please visit

Now WeChat Subscription is Available 🇨🇳


  • Swift Tools 4.0.0
View More Packages from this Author


  • None
Last updated: Tue Nov 08 2022 07:16:56 GMT-0500 (GMT-05:00)