truce.toml reference

Every field cargo truce reads from your project's truce.toml, grouped by table. The file lives at the project root alongside Cargo.toml and is tracked in git — it carries project-level facts only.

Per-developer credentials and machine-specific paths (signing identities, AAX SDK location, notarization Apple ID / team ID, Authenticode certs) live in .cargo/config.toml's [env] table or shell env vars instead. See cargo-config for that surface.

#[vendor] — required

Field Type Required Notes
name string yes Human company name. Shows in DAWs, installers, Apps & Features.
id string yes Reverse-DNS prefix (com.mycompany). Used for AU/VST3/CLAP IDs and Windows installer AppId.
url string no Vendor website. Surfaced in the Windows installer "Publisher URL" field.
au_manufacturer string yes Exactly 4 ASCII characters. AU manufacturer code — must be unique per vendor.

#[[plugin]] — one per plugin, at least one required

Field Type Required Notes
name string yes Human name. Used for bundle filenames and DAW display names.
bundle_id string yes Short lowercase, no-dash identifier. Used internally for bundle / extension reverse-DNS IDs (com.{vendor}.{bundle_id}.au), install plist filenames, and scratch paths. Not used at the CLI.
crate string yes Cargo package name. CLI uses this for -p <crate>. Hyphens become underscores in built .dll/.dylib.
category string yes "effect" / "instrument" / "midi". Drives AU/VST3/CLAP category metadata.
fourcc string yes† Exactly 4 ASCII chars. AU subtype + cross-format unique ID.
au_type string no Override AU type. Defaults: "aumu" for instruments, "aumi" for midi / note-effects, "aufx" for effects.
au_subtype string no Synonym for fourcc. fourcc wins if both are set.
au3_subtype string no 4-char subtype for AU v3 only. Set if v2/v3 must differ.
au_tag string no AU category tag. Defaults to "Effects". Common: "Synthesizer", "Dynamics", "EQ", "MIDI".
{format}_name string no Per-format display-name override: clap_name, vst3_name, vst2_name, au_name, au3_name, aax_name, lv2_name.
windows_icon string no Path to .ico (workspace-root-relative). Embedded as RT_GROUP_ICON in the standalone .exe. Distinct from [windows.packaging] installer_icon — that one's the Inno-wizard chrome; this one's the per-product app icon.
macos_icon string no Path to .icns (workspace-root-relative). Copied into the standalone .app's Contents/Resources/ and referenced via CFBundleIconFile. Generate one with iconutil -c icns <iconset> from a directory of 16/32/128/256/512px (and @2x) PNGs.

† One of fourcc / au_subtype is required.

Category to format-metadata mapping:

category CLAP features VST3 category AU type
"effect" audio-effect Fx aufx
"instrument" instrument Instrument|Synth aumu
"midi" note-effect Fx|Event aumi

{format}_name overrides the display name surfaced to hosts while leaving bundle filenames, IDs, and install paths derived from name. One exception: au3_name also overrides the /Applications/{au3_name}.app install path so two AU v3 builds (e.g. release and beta) can coexist.

#[[suite]] — optional, repeatable

Each entry produces one suite installer per platform that bundles multiple [[plugin]] entries together. Per-plugin installers still ship in parallel; use --no-per-plugin to drop them, or --no-suite to drop the suite output.

Field Required Notes
name yes Display name shown in the installer.
bundle_id yes Short identifier for the suite.
plugins no List of plugin crate or bundle_id strings to include. Omit for "all [[plugin]] entries". Mutually exclusive with exclude_plugins.
exclude_plugins no List of plugins to exclude from the otherwise-implicit "all". Mutually exclusive with plugins.
formats no Per-suite format restriction (intersected with each plugin's enabled formats). Omit for the union.
version no Suite-level version. Defaults to [workspace.package].version.
description no Display blurb in the installer welcome page (where supported).

#[macos.packaging] — optional, macOS only

Field Default Notes
notarize false true → submit to Apple notary and staple. --no-notarize on the CLI skips it. The credentials it uses come from env (see cargo-config).
welcome_html Path to HTML shown on the productbuild wizard's welcome page.
license_html Path to HTML shown on the wizard's license page.

There is no [macos.signing] table — signing identities are per-developer and live in env. See cargo-config.md § macOS code signing.

#[windows.packaging] — optional, Windows only

Project-level installer appearance. Per-developer Authenticode credentials live in env (see cargo-config).

Field Default Notes
publisher [vendor].name "Publisher" in installer and Apps & Features.
publisher_url [vendor].url Publisher URL in the installer.
installer_icon Path to a .ico for the installer + uninstaller.
welcome_bmp Path to a 164×314 .bmp for welcome/finish pages.
license_rtf Path to .rtf or .txt license.
app_id {vendor.id}.{plugin.bundle_id} Inno Setup stable identifier. Only change on rename.

#[packaging] — cross-platform

Field Default Notes
formats plugin's default features Formats to include when packaging. Valid: clap, vst3, vst2, lv2, au2, au3, aax, standalone. --formats on the CLI overrides. macOS .pkg and Windows Inno Setup both honour this; Linux's tarball pipeline ships every default-feature format unconditionally.
preferred_scope "ask" Project-wide default for cargo truce package. "user", "system", or "ask". CLI flags (--user / --system / --ask) override. cargo truce install has no toml override — pass --user / --system per invocation.

Welcome/license screens are OS-specific (macOS uses HTML, Windows uses BMP + RTF) and live under their per-platform [macos.packaging] / [windows.packaging] tables.

#Full example

[vendor]
name = "Acme Audio"
id = "com.acmeaudio"
url = "https://acmeaudio.example"
au_manufacturer = "Acme"

[macos.packaging]
notarize = true
welcome_html = "branding/welcome.html"
license_html = "branding/license.html"

[windows.packaging]
publisher = "Acme Audio, LLC"
installer_icon = "branding/installer.ico"
welcome_bmp = "branding/welcome.bmp"
license_rtf = "branding/license.rtf"

[packaging]
formats = ["clap", "vst3", "aax"]
preferred_scope = "ask"

[[plugin]]
name = "Acme Gain"
bundle_id = "gain"
crate = "acme-gain"
category = "effect"
fourcc = "AGn1"
au_tag = "Dynamics"

[[plugin]]
name = "Acme Synth"
bundle_id = "synth"
crate = "acme-synth"
category = "instrument"
fourcc = "ASy1"
au_tag = "Synthesizer"

[[suite]]
name = "Acme Studio"
bundle_id = "acme-studio"
description = "Gain and Synth in one installer."

#What's not here

These all used to be truce.toml fields and are now per-developer env vars instead. Setting them in truce.toml does nothing; see cargo-config for where they live.

  • [macos].aax_sdk_pathAAX_SDK_PATH
  • [macos.signing].application_identityTRUCE_SIGNING_IDENTITY
  • [macos.signing].installer_identityTRUCE_INSTALLER_SIGNING_IDENTITY
  • [macos.packaging].apple_idAPPLE_ID
  • [macos.packaging].team_idTEAM_ID
  • [windows].aax_sdk_pathAAX_SDK_PATH
  • [windows.signing].azure_accountTRUCE_AZURE_ACCOUNT
  • [windows.signing].azure_profileTRUCE_AZURE_PROFILE
  • [windows.signing].azure_dlibTRUCE_AZURE_DLIB
  • [windows.signing].sha1TRUCE_CERT_SHA1
  • [windows.signing].cert_storeTRUCE_CERT_STORE
  • [windows.signing].pfx_pathTRUCE_PFX_PATH
  • [windows.signing].timestamp_urlTRUCE_TIMESTAMP_URL

The split keeps secrets and machine-specific paths out of the tracked file.