Skip to main content
Version: 1.0.0

Configuration

This page covers Config and recommended runtime presets.

Config

Fory is configured with:

public struct Config {
public let trackRef: Bool
public let compatible: Bool
public let checkClassVersion: Bool
public let maxCollectionSize: Int
public let maxBinarySize: Int
public let maxDepth: Int
}

Default configuration:

let fory = Fory() // ref=false, compatible=true

Swift supports the xlang wire format only, so there is no xlang option in Config or the Fory initializer.

Threading

Fory is single-threaded and optimized to reuse one read/write context pair on the calling thread. Reuse one instance per thread and do not use the same instance concurrently.

Options

trackRef

Enables shared/circular reference tracking for reference-trackable types.

  • false: No reference table (smaller/faster for acyclic or value-only graphs)
  • true: Preserve object identity for class/reference graphs
let fory = Fory(ref: true)

compatible

Enables compatible schema mode for evolution across versions.

  • false: Schema-consistent mode (stricter, lower metadata overhead)
  • true: Compatible mode (supports add/remove/reorder fields)
let fory = Fory()

checkClassVersion

Controls class-version validation in schema-consistent mode. When omitted, it defaults to true when compatible=false and false when compatible=true.

let fory = Fory(compatible: false, checkClassVersion: true)

Size and Depth Limits

maxCollectionSize, maxBinarySize, and maxDepth bound decoded payload size and nesting depth.

let fory = Fory(maxCollectionSize: 1_000_000, maxBinarySize: 64 * 1024 * 1024, maxDepth: 5)

Local, strict schema

let fory = Fory(ref: false, compatible: false)

Cross-language service payloads

let fory = Fory()

Graph/object identity workloads

let fory = Fory(ref: true)

Security

Security-related configuration:

  • Register only the expected generated models before deserializing untrusted payloads.
  • Use checkClassVersion with compatible: false when exact schema matching is required.
  • Set maxCollectionSize, maxBinarySize, and maxDepth for the largest payload shape your service accepts.