Skip to content

KayKit Pack Upstream Layout

declarative-hex-worlds does not bundle KayKit asset binaries. The CLI bootstrap subcommand (and the equivalent bootstrapKayKitAssets programmatic API) mirrors the upstream KayKit pack tree into the consumer’s asset root at install time. This page is the authoritative description of the upstream layout the bootstrap step understands.

Two editions are supported:

EditionLicenseSource
freeCC0-1.0KayKit-Medieval-Hexagon-Pack-1.0 on GitHub
extraCC0-1.0 (purchase)kaylousberg.itch.io — supplied via --source zip

Pack folder: KayKit_Medieval_Hexagon_Pack_1.0_FREE/

KayKit_Medieval_Hexagon_Pack_1.0_FREE/
├── Assets/
│ ├── gltf/ # mirrored by bootstrap
│ │ ├── buildings/{blue,green,red,yellow,neutral}/
│ │ ├── decoration/{nature,props}/
│ │ └── tiles/{base,coast,rivers,roads}/
│ ├── fbx/ # ignored unless --include-source-formats
│ ├── fbx(unity)/ # ignored unless --include-source-formats
│ └── obj/ # ignored unless --include-source-formats
├── Textures/
│ └── hexagons_medieval.png
├── Samples/
│ ├── sample1.jpg
│ └── sample2.jpg
├── License.txt
├── Medieval_Hexagon_UserGuide_v1.pdf
├── contents_buildings.jpg
├── contents_nature.jpg
└── contents_tiles.jpg
  • GLTF count: 221 (one .bin companion each).
  • Categories: buildings, decoration, tiles.
  • Texture sets: default only.

Pack folder: KayKit_Medieval_Hexagon_Pack_1.0_EXTRA/

KayKit_Medieval_Hexagon_Pack_1.0_EXTRA/
├── Assets/
│ ├── gltf/
│ │ ├── buildings/{blue,green,red,yellow,neutral}/
│ │ ├── decoration/{nature,props}/
│ │ ├── tiles/{base,coast,rivers,roads}/
│ │ └── units/{blue,green,red,yellow}/ # EXTRA-only category
│ ├── fbx/, fbx(unity)/, obj/ # ignored unless --include-source-formats
├── Textures/
│ ├── hexagons_medieval.png
│ ├── hexagons_medieval_Fall.png # EXTRA-only seasonal texture
│ ├── hexagons_medieval_Summer.png # EXTRA-only
│ └── hexagons_medieval_Winter.png # EXTRA-only
├── License.txt
├── Medieval_Hexagon_UserGuide_v1.pdf
├── contents_buildings.jpg
├── contents_nature.jpg
├── contents_tiles.jpg
├── contents_textures.jpg # EXTRA-only marker
└── contents_units.jpg # EXTRA-only marker
  • GLTF count: 404 (one .bin companion each).
  • Categories: buildings, decoration, tiles, units.
  • Texture sets: default, fall, summer, winter.

Both editions are mirrored under the same path on the consumer:

<consumer-out>/addons/kaykit_medieval_hexagon_pack/
├── Assets/gltf/... # mirror of the upstream gltf tree
└── .bootstrap.json # integrity sidecar

<consumer-out> defaults to public/assets/models/ (Vite / Next.js style), falling back to assets/models/ and then the current working directory. It can be overridden with --out on the CLI or BootstrapKayKitAssetsOptions.out in the programmatic API.

The bootstrap step (and the programmatic detectKayKitLayout helper) identifies an edition by checking marker files plus the presence of the units/ directory:

Marker / signalFREEEXTRA
License.txtyesyes
Medieval_Hexagon_UserGuide_v1.pdfyesyes
contents_buildings.jpgyesyes
contents_nature.jpgyesyes
contents_tiles.jpgyesyes
contents_units.jpgnoyes
contents_textures.jpgnoyes
Assets/gltf/units/noyes

EXTRA is tested first because its marker set is a superset of FREE’s.

import {
KAYKIT_MEDIEVAL_FREE_LAYOUT,
KAYKIT_MEDIEVAL_EXTRA_LAYOUT,
detectKayKitLayout,
kayKitLayoutForEdition,
expectedTexturePaths,
type KayKitUpstreamLayout,
} from 'declarative-hex-worlds/bootstrap/upstream-layout';

Use these to:

  • Pre-flight check an extracted pack folder (detectKayKitLayout(rootPath)).
  • Drive consumer-side validation pipelines that need the published asset counts (KAYKIT_MEDIEVAL_FREE_LAYOUT.expectedGltfCount).
  • List the texture filenames an edition should have shipped (expectedTexturePaths(rootPath, layout)).