acme-fonts/
├── __tpkg__/
│ └── manifest.yaml
├── AcmeSans-Regular.otf
├── AcmeSans-Bold.otf
└── LICENSE
GUIDES · 05
Create a data payload.
A data payload is a directory of files — fonts, datasets, word lists — pressed into a .tfs image with a manifest. No toolchain: imaging runs in-process inside the tfs CLI.
|
Note
|
This guide is part 2 of the Basic payloads tutorial. The blog chapter builds the fonts example step by step. |
Lay out the directory.
The files as you want them mounted, plus one extra: the manifest, at __tpkg__/manifest.yaml inside the image.
Write the manifest.
schema_version: 1
kind: data
name: acme-fonts
version: 2.1.0
producer: {tool: tfs, tool_version: "0.2.5"}
created: "2026-08-01T00:00:00Z"
digest: {tree_hash: "…", blob_sha256: "…"}
signing: {state: unsigned}
encryption: {state: none}
mount_semantics: {suggested: /usr/share/fonts/acme}
capabilities: {exec: false, read: true}
platforms: universal
-
kind: datadeclares that nothing here executes;capabilities.exec: falsemakes that a fact the loader enforces, not a courtesy. -
platforms: universal— one image serves every OS. Platform-split payloads name their triplets instead. -
mount_semantics.suggestedis a hint, not a rule — the consumer decides the mount point (see the mount rule below). -
mkimagefills in the digests;signingstaysunsigneduntil you sign — see the verify guide.
Image it.
$ tfs mkimage acme-fonts/ -o acme-fonts-2.1.0.tfs
The default image format is limnifs — a pure-Rust, content-addressed
format; nothing to compile, no external tool to install, imaging happens
in-process. --format dwarfs opts into the dwarfs writer explicitly;
dwarfs stays a first-class read backend, so existing dwarfs images mount
everywhere they always have.
Check the image.
$ tfs info --manifest acme-fonts-2.1.0.tfs
$ tfs ls acme-fonts-2.1.0.tfs
$ tfs ls -r -l acme-fonts-2.1.0.tfs
tfs info --manifest prints the manifest back as parsed — the fastest
way to catch a YAML mistake. tfs ls lists the tree without extracting
anything.
The mount rule.
A slice never decides where it lives. The consumer’s manifest declares
the dependency in its requires — the payload, a version range, and the
mount point — so one installed copy of acme-fonts can serve every
application that mounts it, each at its own path.
Consumers attach your payload in two ways: their manifest’s requires
(resolved from the store, shared machine-wide), or
tebako press --image <path>:<mount> (carried inside their package).
Either way, your image ships location-agnostic.
Ship it.
The image is the artifact. Publish it on your own releases with a registry index your users can add — the walkthrough is in Publish to your own registry.