Skip to main content

Single file

var config = try otter_conf.load(Config, allocator, abs_path, .{});
defer otter_conf.freeConfig(Config, allocator, &config);
loadWithMetadata returns file size and mtime_ns for hot-reload bookkeeping. loadFromSlice parses embedded or in-memory content:
const content = @embedFile("default.conf");
const config = try otter_conf.loadFromSlice(Config, allocator, content);
loadOrCreate loads an existing file or writes defaults on first run.

Directory loading

const profiles = try otter_conf.loadDir(Profile, allocator, "/etc/app/profiles.d", .{
    .extension = ".conf",
    .recursive = false,
});
defer profiles.deinit(true);
loadWithOverrides merges a system directory with user overrides by filename.

Serialization

const output = try otter_conf.serialize(Config, allocator, config, .{
    .header_comment = "Generated by my-app",
    .spacing = true,
});
defer allocator.free(output);

try otter_conf.save(Config, allocator, config, abs_path, .{});
try otter_conf.saveDefaults(Config, allocator, abs_path, .{});
otter-settings uses save when the user applies changes.

LoadOptions

FieldDefaultNotes
max_file_size64 MiBRejects oversized files

Errors

LoadError covers I/O (FileNotFound, MmapFailed, FileTooLarge). ParseError covers syntax (UnterminatedString, InvalidNumber, ArrayTooLarge).