.akr files to store and share setup sections, overlay themes, HUD labels, and control-display presets. An .akr file is a ZIP archive containing one manifest and one main payload. StartPos and Whole setup packs also contain the exact compressed snapshot named by each StartPos entry. The reader accepts only manifest.json, the main payload required by the archive kind, and StartPos attachments declared by setup.json.
Archive shape
Most archives contain two entries. StartPos and Whole setup archives add one snapshot entry per StartPos: The reader rejects undeclared entries, rooted paths, backslashes, empty path segments, and. or .. path segments, as well as archives that do not match the expected payload name and kind.
Manifest
Themanifest.json file uses the following structure:
The manifest must contain exactly these fields, including both fields in
target. Missing, extra, differently cased, or null fields are rejected. The
manifest size limit is 16 KiB.
Current archive kinds
Every current kind uses manifest
kindVersion 1. The payload format has its own version and is validated before Akron applies imported state.
Payload contract versions
The archive container (akron-archive, formatVersion 1, kindVersion 1) describes
the ZIP shape and the manifest. It is independent of what a payload means, and it does
not change when a payload contract changes.
The setup payload contract and the StartPos snapshot contract move together:
A StartPos snapshot addresses each object by its position in a clean reload of the room
rather than by an identifier of its own. That makes a snapshot meaningful only against
the fresh room the build that wrote it produced. When Akron changes what a clean reload
contains, every position after the change shifts, and two objects of the same type with
no distinguishing identity can pair the wrong way round and restore without reporting a
failure. Both contracts are therefore bumped together whenever the fresh room changes,
and the snapshot file name carries the same version so an older file is never read.
The contracts also move when a snapshot has to carry something it did not carry before.
A snapshot records, next to each saved object, whether the name it was saved under is
one any install can look up again and whether the map laid that entity out. A snapshot
written without those cannot be checked against them, so it is refused rather than read
with a weaker guarantee under the same version number.
Akron does not convert older payloads. A pack whose payload format is not the current
one is refused when it is read, before any attachment is opened, and the message names
both contract versions. A snapshot whose document format is not the current one is
refused by the reader, before the reconstruction path sees it.
Setup payload
Setup packs use thesetup archive contract:
state omits its required fields:
buttonBindings and menuActionBindings are present
only for Keybinds and Whole. startPositions is present only for
StartPos and Whole. The payload createdUtc value must exactly match the
manifest createdAt value.
The setup payload size limit is 2 MiB.
Each compressed StartPos snapshot attachment is limited to 128 MiB. All
snapshot attachments in one setup archive are limited to 509 MiB in total.
Each expanded v10 snapshot is limited to 384 MiB while Akron validates it.
A StartPos or Whole archive can contain at most 99 StartPos entries. Each
slot key must be in the range 1-99.
Portable setup validation limits
Akron applies these limits when it writes or reads a setup pack. Values outside the ranges are rejected rather than clamped during pack validation.
Required strings cannot be empty or whitespace. Optional strings can be empty,
but cannot exceed their listed length.
Every enum field must contain a defined named string value. Each StartPos entry
must use the archive name
startpos/<slot>.v10.json.gz and a 64-character
lowercase hexadecimal SHA-256 digest.
Setup sections
Setup packs preserve machine-local values: the screenshot export path;
recording output folder, filename template, replay auto-start mode, and
colorspace arguments; audio-splitter state and device selections; and the Auto
Deafen hotkey. Whole exports omit these values too.
Scoped imports replace the selected portable settings without resetting
unrelated settings. A StartPos import also replaces every StartPos slot for the
archive’s target map. Slots for other maps remain unchanged.
Import safety rules
Imports follow a “fail closed” policy: Akron rejects archives with unsupported formats or versions, incorrect kinds, missing or extra entries, oversized payloads, invalid JSON, or unsupported payload formats. Setup packs created beforeakron-setup-v7 cannot be imported. Recreate the setup and its StartPos slots in the current build, then export a new pack.
For each StartPos attachment, Akron verifies the declared checksum, map, and
room before applying the setup. It then binds the snapshot to the recipient’s
active save-file slot. The exported attachment contains the captured active
map’s berry progress, but import replaces that field with the recipient’s
current active-map berry progress before binding the snapshot. Akron does not
import the author’s progress or module save data.
If an import fails, current settings remain unchanged. Akron shows a short toast and writes the detailed error to its logs.
Maintenance requirements
Settings included in.akr setup packs must meet these requirements:
- Must be defined as a field in
AkronSetupState. - Must support capture from
AkronModuleSettings. - Must support application back to
AkronModuleSettings. - Must implement scoped-section copy behavior when the setting belongs to
StartPos,AutoKill,AutoDeafen,Recorder,Audio, orHud. - Must have automated tests proving whole import/export and scoped import/export preserve the intended state.
- A unique manifest
kind, payload entry name, payload format string, and payload size limit. - Dedicated single-payload archive helper methods.
- Simple payload entry names (e.g.,
labels.json). - Unsupported payload-format rejection before state is applied.
- Tests for round-trip behavior, wrong kinds, extra entries, oversized payloads, and missing manifests.
- An update to this page that documents the complete contract.
.akr archive. The current contract requires exactly one kind, one manifest, and one main payload. Only StartPos snapshot attachments declared by setup.json are allowed.
Archive tests live in tests/archive-tests.cs.